思路:

这题和1227的求法一样,只不过1227是小数据,暴力下,就能进行预处理。

这题的预处理区间期望cost[i][j]需要利用单调性。

即假使以pos位置为安排的点,那么这个区间在其左边的概率为l,右边的概率为r,总期望为sum。如果将安排点从pos放到pos-1

该区间增加的期望为r*(p[pos].x-p[pos-1].x)

减少的期望为l*(p[pos].x-p[pos-1].x)

如果减少的超过增加的,那么pos-1就比pos好。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define Maxn 1010
using namespace std;
double dp[Maxn][],cost[Maxn][Maxn];
struct Point{
int x;
double p;
}p[Maxn];
map<int ,double> vi;
int main()
{
int n,m,i,j,l,x,k;
double cc;
while(scanf("%d%d",&n,&m)!=EOF,n||m)
{
memset(dp,,sizeof(dp));
memset(p,,sizeof(p));
memset(cost,,sizeof(cost));
vi.clear();
int mx=;
for(i=;i<=n;i++)
{
scanf("%d",&l);
while(l--)
{
scanf("%d%lf",&x,&cc);
vi[x]+=cc;
}
}
int cnt=;
map<int ,double> ::iterator it;
for(it=vi.begin();it!=vi.end();it++)
p[++cnt].x=it->first,p[cnt].p=it->second;
double l,r,sum;
int pos;
double t;
for(i=cnt;i>;i--)
{
l=r=sum=;
r=p[i].p;
pos=i;
for(j=i-;j>=;j--)
{
l+=p[j].p;
sum+=p[j].p*(p[pos].x-p[j].x);
while(pos>&&(t=(r-l)*(p[pos].x-p[pos-].x))<)
{
sum+=t;
pos--;
l-=p[pos].p;
r+=p[pos].p;
}
cost[j][i]=sum;
}
}
for(i=;i<=cnt;i++)
dp[i][]=cost[][i];
for(i=;i<=m;i++)
dp[][i]=;
for(k=;k<=m;k++)
{
for(i=;i<=cnt;i++)
{
if(i<=k) {dp[i][k]=;continue;}
dp[i][k]=1e20;
for(j=i-;j>=;j--)
dp[i][k]=min(dp[i][k],dp[j][k-]+cost[j+][i]);
}
}
printf("%.2lf\n",dp[cnt][m]);
}
return ;
}

hdu 4412 利用单调性的动态规划的更多相关文章

  1. HDU 1176 免费馅饼 (动态规划)

    HDU 1176 免费馅饼 (动态规划) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼 ...

  2. HDU 1074 Doing Homework (动态规划,位运算)

    HDU 1074 Doing Homework (动态规划,位运算) Description Ignatius has just come back school from the 30th ACM/ ...

  3. hdu 4412 Sky Soldiers DP

    动态规划,主要是用单调性求区间的最小期望. 代码如下: #include<iostream> #include<stdio.h> #include<algorithm&g ...

  4. HDU 1003 Max Sum【动态规划求最大子序列和详解 】

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. HDU 5433 Xiao Ming climbing 动态规划

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5433 Xiao Ming climbing Time Limit: 2000/1000 MS (Ja ...

  6. hdu 1421:搬寝室(动态规划 DP + 排序)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. ACM学习历程—HDU 5534 Partial Tree(动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题目大意是给了n个结点,让后让构成一个树,假设每个节点的度为r1, r2, ...rn,求f(x ...

  8. HDU 2084 数塔 (动态规划DP)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目分析:此题采用动态规划自底向上计算,如果我们要知道所走之和最大,那么最后一步肯定是走最后一排 ...

  9. hdu 4412 2012杭州赛区网络赛 期望

    虽然dp方程很好写,就是这个期望不知道怎么求,昨晚的BC也是 题目问题抽象之后为:在一个x坐标轴上有N个点,每个点上有一个概率值,可以修M个工作站, 求怎样安排这M个工作站的位置,使得这N个点都走到工 ...

随机推荐

  1. 解决CSS各种IE各种兼容问题(Google解决方案)

    google的 ie7 – js中是一个JavaScript库(解决IE与W3C标准的冲突的JS库),使微软的Internet Explorer的行为像一个Web标准兼容的浏览器,支持更多的W3C标准 ...

  2. Release 版本和 Debug 版本

    什么是 Release 版本.Debug 版本? bug-缺陷,程序故障.而debug指的是排除缺陷,显然这个模式是面向开发者的. 而release是满足发布所用. Debug 和 Release,在 ...

  3. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.5 Delete删除用户]

    3.5 Delete删除用户 删除也是通过ObjectID获得对象进行删除 [Authorize] public async Task<ActionResult> Delete(strin ...

  4. canvas 动态飞速旋转的矩形

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. redis-在乌班图下设置自动启动

    一.修改redis.conf 1.打开后台运行选项,默认情况下,Redis不在后台运行: daemonize yes 2.配置log文件地址,默认使用标准输入,即打印在命令行终端 的窗口上 logfi ...

  6. Thread message loop for a thread with a hidden window? Make AllocateHwnd safe

    Thread message loop for a thread with a hidden window? I have a Delphi 6 application that has a thre ...

  7. MVC网站发布常见问题

    直接发布的时候生成的bin会漏掉一些文件,从而导致网站无法访问: 解决方法:发布之后,再在本地运行一下网站,然后将运行后生成的bin文件夹下的文件拷贝到发布的文件夹目录下进行覆盖,就可以了

  8. 关于OPenGL和OSG的矩阵 (转)

    关于OPenGL和OSG的矩阵 矩阵真的是一个很神奇的数学工具, 虽然单纯从数学上看, 它并没有什么特别的意义, 但一旦用到空间中的坐标变换,它就“一遇风云便成龙”, 大显神威了.简单的工具实现了复杂 ...

  9. SSI框架中配置log4j

    事实上主要是log4j配置,跟SSI关系不大. web.xml中加入 <context-param> <param-name>log4jConfigLocation</p ...

  10. JS同名方法,

    JS同名方法只会调用最后一个方法. JS中同时绑定多个事件,先绑定的先调用.后绑定的后调用.