虽然dp方程很好写,就是这个期望不知道怎么求,昨晚的BC也是

题目问题抽象之后为:在一个x坐标轴上有N个点,每个点上有一个概率值,可以修M个工作站,

求怎样安排这M个工作站的位置,使得这N个点都走到工作站的距离期望值最小?

解题报告人:SpringWater(GHQ)

解题思路:状态方程:dp[i][j]  =  min{ dp[i - 1][k - 1]  + cost[k][j]   }dp[i][j]表示在1到j修i个站,的最小期望值,

cost【k】【j】是我预处理的k到j这段区间修一个工作站的期望值 ,因为在求cost【k】【j】具

有单调性,所以可以在O(n^2)复杂度算出

 #include<stdio.h>
#include<algorithm>
#include<string.h>
#include<map>
#define INF ((1<<23)-1)
using namespace std;
map<int ,double> mp;
double f[][];
typedef struct
{
int x; double p;
}Point;
Point pt[];
int kk,m; void initial()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
f[i][j]=INF;
for(int i=;i<=m;i++)
for(int j=i;j<=m;j++)
f[i][j]=0.0;
} int main()
{
int k,i,j,l,x; double p;
while( scanf("%d%d",&kk,&m),kk+m )
{
mp.clear();
initial();
for(i=;i<=kk;i++)
{
scanf("%d",&l);
for(j=;j<=l;j++)
{
scanf("%d%lf",&x,&p);
mp[x]+=p;
}
}
map<int,double>::iterator it;
j=;
for( it=mp.begin(); it!=mp.end();it++,j++)
{
pt[j].x=(it->first);
pt[j].p=(it->second);
}
int n=j-;
for( i=;i<=n;i++ )
{
for(j=;j<=m && j<=i; j++ )
{
f[i][j]=INF;
double pre=0.000,suf=0.000;
int cur=i; double add=0.000;
for(k=i-;k>=j-;k--)
{
if( k+ != i )
{
pre+=pt[k+].p;
add+=pt[k+].p*(pt[cur].x-pt[k+].x);
}
while( pt[cur].p+suf < pre )
{
suf+=pt[cur].p;
cur--;
pre-=pt[cur].p;
add-=pt[cur].p*(pt[cur+].x-pt[cur].x);
add+=pt[cur+].p*(pt[cur+].x-pt[cur].x);
add-=pre*(pt[cur+].x-pt[cur].x);
add+=(suf-pt[cur+].p)*(pt[cur+].x-pt[cur].x);
}
f[i][j]=min(f[i][j],f[k][j-]+add);
}
}
}
printf("%.2lf\n",f[n][m]);
}
return ;
}

hdu 4412 2012杭州赛区网络赛 期望的更多相关文章

  1. hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***

    题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙,          每个逮捕队伍在每个城市可以选 ...

  2. hdu 4273 2012长春赛区网络赛 三维凸包中心到最近面距离 ***

    新模板 /* HDU 4273 Rescue 给一个三维凸包,求重心到表面的最短距离 模板题:三维凸包+多边形重心+点面距离 */ #include<stdio.h> #include&l ...

  3. hdu 4741 2013杭州赛区网络赛 dfs ***

    起点忘记录了,一直wa 代码写的很整齐,看着很爽 #include<cstdio> #include<iostream> #include<algorithm> # ...

  4. hdu 4739 2013杭州赛区网络赛 寻找平行坐标轴的四边形 **

    是平行坐标轴的,排个序搞一下就行了,卧槽,水的不行 如果不是平行的,则需要按照边长来判断

  5. hdu 4738 2013杭州赛区网络赛 桥+重边+连通判断 ***

    题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥,使得这n座岛不连通,求最少要派多少人去. 处理重边 边在遍历的时候,第一个返回的一定是之前去的边,所以 ...

  6. hdu 4293 2012成都赛区网络赛 dp ****

    题意:有n个人,可任意分成若干组,然后每个人个各提供一个信息,表示他们组前面有多少人,后面有多少人.问最多有多少个信息是不冲突的. 将n个人看成一组区间,然后每个人的信息可以表示为该人所在组的区间,然 ...

  7. hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***

    分析:假设g(g(g(n)))=g(x),x可能非常大,但是由于mod 10^9+7,所以可以求出x的循环节 求出x的循环节后,假设g(g(g(n)))=g(x)=g(g(y)),即x=g(y),y也 ...

  8. hdu 4278 2012天津赛区网络赛 数学 *

    8进制转为10进制 #include<cstdio> #include<iostream> #include<algorithm> #include<cstr ...

  9. hdu 4274 2012长春赛区网络赛 树形dp ***

    设定每个节点的上限和下限,之后向上更新,判断是否出现矛盾 #include<cstdio> #include<iostream> #include<algorithm&g ...

随机推荐

  1. 【GoLang】golang runtime 调度原理

    参考资料: http://m.yl1001.com/group_article/3231471449287668.htm http://tieba.baidu.com/p/3542454435?sha ...

  2. 《C++ Primer》 ---- 关于变量 与 基本类型

    类型是所有程序的基础;    C++ 定义了几种基本类型: 字符型(char 和 wchar_t),整型(short int long bool),浮点型(float doubel) 并且提供自定义数 ...

  3. 查看Android应用包名package和入口activity名称

    使用android自动化测试工具启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用aapt    //aa ...

  4. Google Code Jam 2015 R1C B

    题意:给出一个键盘,按键都是大写字母.给出一个目标单词和一个长度L.最大值或者最大长度都是100.现在随机按键盘,每个按键的概率相同. 敲击出一个长度为L的序列.求该序列中目标单词最多可能出现几次,期 ...

  5. ffmpeg-20160525-git-bin

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  6. Java for LeetCode 211 Add and Search Word - Data structure design

    Design a data structure that supports the following two operations: void addWord(word)bool search(wo ...

  7. 修改UINavigationController返回按钮颜色

    系统默认颜色是蓝色的 视觉效果非常难看 在push进的ViewController中写 //修改UINavigationController的文字颜色 self.navigationControlle ...

  8. LeetCode 453 Minimum Moves to Equal Array Elements

    Problem: Given a non-empty integer array of size n, find the minimum number of moves required to mak ...

  9. 分模块的maven项目调试时报Source not found的解决办法

    一.背景 通常在开发中,我们经常会拆分我们的项目为一个个maven子工程,然后用一个父项目进行集成,并且子项目还会继承自父项目.当我们对这些项目进行debug调试的时候往往会在eclipse中出现so ...

  10. ios tableview 适配横竖屏

    tableview.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;