hdu 4412 2012杭州赛区网络赛 期望
虽然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杭州赛区网络赛 期望的更多相关文章
- hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***
题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙, 每个逮捕队伍在每个城市可以选 ...
- hdu 4273 2012长春赛区网络赛 三维凸包中心到最近面距离 ***
新模板 /* HDU 4273 Rescue 给一个三维凸包,求重心到表面的最短距离 模板题:三维凸包+多边形重心+点面距离 */ #include<stdio.h> #include&l ...
- hdu 4741 2013杭州赛区网络赛 dfs ***
起点忘记录了,一直wa 代码写的很整齐,看着很爽 #include<cstdio> #include<iostream> #include<algorithm> # ...
- hdu 4739 2013杭州赛区网络赛 寻找平行坐标轴的四边形 **
是平行坐标轴的,排个序搞一下就行了,卧槽,水的不行 如果不是平行的,则需要按照边长来判断
- hdu 4738 2013杭州赛区网络赛 桥+重边+连通判断 ***
题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥,使得这n座岛不连通,求最少要派多少人去. 处理重边 边在遍历的时候,第一个返回的一定是之前去的边,所以 ...
- hdu 4293 2012成都赛区网络赛 dp ****
题意:有n个人,可任意分成若干组,然后每个人个各提供一个信息,表示他们组前面有多少人,后面有多少人.问最多有多少个信息是不冲突的. 将n个人看成一组区间,然后每个人的信息可以表示为该人所在组的区间,然 ...
- 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也 ...
- hdu 4278 2012天津赛区网络赛 数学 *
8进制转为10进制 #include<cstdio> #include<iostream> #include<algorithm> #include<cstr ...
- hdu 4274 2012长春赛区网络赛 树形dp ***
设定每个节点的上限和下限,之后向上更新,判断是否出现矛盾 #include<cstdio> #include<iostream> #include<algorithm&g ...
随机推荐
- wav转aac
//调用neroAacEnc.exe STARTUPINFO si={}; PROCESS_INFORMATION pi={};//隐藏窗口 si.cb=sizeof(si); si.dwFlags= ...
- AngularJS vs. jQuery
很多Web开发新手都会有这样的疑问“我应该使用什么开发框架呢,如何快速学会Web开发呢?”这个问题其实没有一个统一的正确答案,其中讨论最多的就是AngularJS和jQuery的差别.这两者的之间的比 ...
- word to word
Question: For each word, you can get a list of neighbor words by calling getWords(String), find all ...
- C++实现VPN工具之代码示例
创建.连接.挂断.删除VPN实现起来并不难,下面给出一套比较完整的代码.该段代码只是示例代码,但是已经通过了编译,对API的使用和VPN操作步骤是没问题的.具体每个API代表的意义可以参看<C+ ...
- Unity3d 换装Avatar系统
原理就是用新造的部件和角色的骨骼进行重新对接. demo的使用方法: PartIdx设置要换那个部件[0,4],一共5个部件 EquipIdx设置要更换部件的装备索引[0,1],具体看我的Change ...
- DNS基础及域名系统架构
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- DataStage
parallel job shell调用:dsjob ./dsjob -run -mode NORMAL -paramfile xxx.param <PROJECT> <JOB> ...
- XP共享连接数限制
- Effective C++ -----条款38:通过复合塑模出has-a或“根据某物实现出”
复合(composition)的意义和public继承完全不同. 在应用域(application domain),复合意味has-a(有一个).在实现域(implementation domain) ...
- Effective C++ -----条款36:绝不重新定义继承而来的non-virtual函数
绝对不要重新定义继承而来的non-virtual函数.