虽然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)复杂度算出

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<string.h>
  4. #include<map>
  5. #define INF ((1<<23)-1)
  6. using namespace std;
  7. map<int ,double> mp;
  8. double f[][];
  9. typedef struct
  10. {
  11. int x; double p;
  12. }Point;
  13. Point pt[];
  14. int kk,m;
  15.  
  16. void initial()
  17. {
  18. for(int i=;i<=;i++)
  19. for(int j=;j<=;j++)
  20. f[i][j]=INF;
  21. for(int i=;i<=m;i++)
  22. for(int j=i;j<=m;j++)
  23. f[i][j]=0.0;
  24. }
  25.  
  26. int main()
  27. {
  28. int k,i,j,l,x; double p;
  29. while( scanf("%d%d",&kk,&m),kk+m )
  30. {
  31. mp.clear();
  32. initial();
  33. for(i=;i<=kk;i++)
  34. {
  35. scanf("%d",&l);
  36. for(j=;j<=l;j++)
  37. {
  38. scanf("%d%lf",&x,&p);
  39. mp[x]+=p;
  40. }
  41. }
  42. map<int,double>::iterator it;
  43. j=;
  44. for( it=mp.begin(); it!=mp.end();it++,j++)
  45. {
  46. pt[j].x=(it->first);
  47. pt[j].p=(it->second);
  48. }
  49. int n=j-;
  50. for( i=;i<=n;i++ )
  51. {
  52. for(j=;j<=m && j<=i; j++ )
  53. {
  54. f[i][j]=INF;
  55. double pre=0.000,suf=0.000;
  56. int cur=i; double add=0.000;
  57. for(k=i-;k>=j-;k--)
  58. {
  59. if( k+ != i )
  60. {
  61. pre+=pt[k+].p;
  62. add+=pt[k+].p*(pt[cur].x-pt[k+].x);
  63. }
  64. while( pt[cur].p+suf < pre )
  65. {
  66. suf+=pt[cur].p;
  67. cur--;
  68. pre-=pt[cur].p;
  69. add-=pt[cur].p*(pt[cur+].x-pt[cur].x);
  70. add+=pt[cur+].p*(pt[cur+].x-pt[cur].x);
  71. add-=pre*(pt[cur+].x-pt[cur].x);
  72. add+=(suf-pt[cur+].p)*(pt[cur+].x-pt[cur].x);
  73. }
  74. f[i][j]=min(f[i][j],f[k][j-]+add);
  75. }
  76. }
  77. }
  78. printf("%.2lf\n",f[n][m]);
  79. }
  80. return ;
  81. }

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. wav转aac

    //调用neroAacEnc.exe STARTUPINFO si={}; PROCESS_INFORMATION pi={};//隐藏窗口 si.cb=sizeof(si); si.dwFlags= ...

  2. AngularJS vs. jQuery

    很多Web开发新手都会有这样的疑问“我应该使用什么开发框架呢,如何快速学会Web开发呢?”这个问题其实没有一个统一的正确答案,其中讨论最多的就是AngularJS和jQuery的差别.这两者的之间的比 ...

  3. word to word

    Question: For each word, you can get a list of neighbor words by calling getWords(String), find all ...

  4. C++实现VPN工具之代码示例

    创建.连接.挂断.删除VPN实现起来并不难,下面给出一套比较完整的代码.该段代码只是示例代码,但是已经通过了编译,对API的使用和VPN操作步骤是没问题的.具体每个API代表的意义可以参看<C+ ...

  5. Unity3d 换装Avatar系统

    原理就是用新造的部件和角色的骨骼进行重新对接. demo的使用方法: PartIdx设置要换那个部件[0,4],一共5个部件 EquipIdx设置要更换部件的装备索引[0,1],具体看我的Change ...

  6. DNS基础及域名系统架构

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  7. DataStage

    parallel job shell调用:dsjob ./dsjob -run -mode NORMAL -paramfile xxx.param <PROJECT> <JOB> ...

  8. XP共享连接数限制

  9. Effective C++ -----条款38:通过复合塑模出has-a或“根据某物实现出”

    复合(composition)的意义和public继承完全不同. 在应用域(application domain),复合意味has-a(有一个).在实现域(implementation domain) ...

  10. Effective C++ -----条款36:绝不重新定义继承而来的non-virtual函数

    绝对不要重新定义继承而来的non-virtual函数.