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个点都走到工 ...
随机推荐
- SQL SERVER 2005如何建立自动备份的维护计划
SQL Server 2005中可以使用维护计划来为数据库自动备份,减少数据库管理员的工作负担.其使用方法如下: (1)启动[sql server Management Studio],在[对象资源管 ...
- 使用XCopy发布网页
链接:https://documentation.devexpress.com/#eXpressAppFramework/CustomDocument113245 In this lesson, yo ...
- JPA一对多和多对一关系
1-m:多的一方为关系维护端,关系维护端负责外键纪录的更新,关系被维护端没有权力更新外键纪录. 维护端注解 @OneToMany(cascade = { CascadeType.PERSIST, Ca ...
- 前端相关的seo技术
相信大部分的前端开发人员应该深知seo对我们的重要性,所以个人认为平台在开发初期就应该要考虑好seo优化的问题,不然做出来的页面,就算是效果很炫,功能很强,但是对搜索引擎也不友善.如果等到成熟时期再来 ...
- linxu php连接sqlserver
今天linux的yum也不能用,用的是第三方的yum源,yum安装好后更新header又花了很长时间. 记得安装指定安装目录要用 --with-php-config=PATH命令. CentOS 6安 ...
- OS_TASK.C
/*************************************************************************************************** ...
- Gtest源码剖析:1.实现一个超级简单的测试框架xtest
下面的代码模仿gtest实现,主要说明了以下两点: ASSERT_* 和 EXPECT_*系列断言的原理和作用. gtest是怎样通过宏自动注册测试代码让其自动运行的. #include <io ...
- percona-xtrabackup 文档
https://www.percona.com/doc/percona-xtrabackup/2.4/index.html
- BM25相关度打分公式
BM25算法是一种常见用来做相关度打分的公式,思路比较简单,主要就是计算一个query里面所有词和文档的相关度,然后在把分数做累加操作,而每个词的相关度分数主要还是受到tf/idf的影响.公式如下: ...
- Android adb.exe程序启动不起来,如何处理
经常遇到 Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be ...