hdu 4412 利用单调性的动态规划
思路:
这题和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 利用单调性的动态规划的更多相关文章
- HDU 1176 免费馅饼 (动态规划)
HDU 1176 免费馅饼 (动态规划) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼 ...
- HDU 1074 Doing Homework (动态规划,位运算)
HDU 1074 Doing Homework (动态规划,位运算) Description Ignatius has just come back school from the 30th ACM/ ...
- hdu 4412 Sky Soldiers DP
动态规划,主要是用单调性求区间的最小期望. 代码如下: #include<iostream> #include<stdio.h> #include<algorithm&g ...
- HDU 1003 Max Sum【动态规划求最大子序列和详解 】
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 5433 Xiao Ming climbing 动态规划
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5433 Xiao Ming climbing Time Limit: 2000/1000 MS (Ja ...
- hdu 1421:搬寝室(动态规划 DP + 排序)
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- ACM学习历程—HDU 5534 Partial Tree(动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题目大意是给了n个结点,让后让构成一个树,假设每个节点的度为r1, r2, ...rn,求f(x ...
- HDU 2084 数塔 (动态规划DP)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目分析:此题采用动态规划自底向上计算,如果我们要知道所走之和最大,那么最后一步肯定是走最后一排 ...
- hdu 4412 2012杭州赛区网络赛 期望
虽然dp方程很好写,就是这个期望不知道怎么求,昨晚的BC也是 题目问题抽象之后为:在一个x坐标轴上有N个点,每个点上有一个概率值,可以修M个工作站, 求怎样安排这M个工作站的位置,使得这N个点都走到工 ...
随机推荐
- POJ 1005(累加)
/* * POJ_1005.cpp * * Created on: 2013年10月14日 * Author: Administrator */ #include <iostream> # ...
- 6 种CSS设置居中的方法
原文 Demos of each of the methods below by clicking here. Horizontal centering with css is rather easy ...
- (剑指Offer)面试题21:包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 在该栈中,调用min,push,pop的时间复杂度都是O(1) 思路: 1.除了原来的栈s,增加一个辅助栈s_min,用 ...
- 真正通用的SQL分页存储过程
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...
- CorelDraw x6【Cdr x6】官方简体中文破解版(64位)安装图文教程、破解注册方法
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 【M32】在未来时态下发展程序
1.在未来时态下发展程序,就是接受“事情总会变化”的事实,并准备应对之策. 2.记住,程序的维护者通常不是最初的开发者,因此,设计和实现的时候,应该考虑别人更好地理解,修改自己的程序. 3.重要的一点 ...
- GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]
[OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...
- Cocos2d-x 3.0 动作
http://blog.csdn.net/lnb333666/article/details/16858635 //运行一个action动作对象 runAction("action对象&qu ...
- 【KPC】关于为什么不用Zepto而用JQuery
1.zepto在window phone手机上不是很兼容 2.JQuery的Deferred对象在zepto上不支持. 3.JQuery经过压缩,以及部分页面的使用,以及缓存,可以达到优化用户体验的效 ...
- IIS6_IIS7日志文件位置
准备统计下页面访问量 查找IIS日志,发现在以前IIS6日志的位置,竟然木有找到日志... 查看下IIS设置,发现IIS7和6的默认日志位置不一样额... IIS 6 Log files locati ...