hdu 4412 Sky Soldiers DP
动态规划,主要是用单调性求区间的最小期望。
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#define MAX 1004
#define inf 1<<22
using namespace std;
double dp[MAX][MAX],b,add,l,r;
map<int,double>q;
struct node
{
int x;
double p;
}an[MAX];
void init(int m)
{
int i,j;
for(i=;i<=;i++)
for(j=;j<=;j++)
dp[i][j]=inf;
for(i=;i<=m;i++)
for(j=i;j<=m;j++)
dp[i][j]=0.0;
}
int main(){
int n,m,k,i,j,a;
while(scanf("%d%d",&n,&m)&&(n+m)){
q.clear();
for(i=;i<n;i++){
scanf("%d",&k);
for(j=;j<k;j++){
scanf("%d%lf",&a,&b);
q[a]+=b;
}
}
n=;
for(map<int,double>::iterator it=q.begin();it!=q.end();it++){
an[++n].x=it->first;
an[n].p=it->second;
}
init(m);
for(i=;i<=n;i++){
for(j=;j<=m&&j<=i;j++){
dp[i][j]=inf;
double pre=0.0,suf=0.0;
int cur=i;add=0.0;
for(k=i-;k>=j-;k--){
if(k+!=i){
pre+=an[k+].p;
add+=an[k+].p*(an[cur].x-an[k+].x);
}
while(an[cur].p+suf<pre){
suf+=an[cur].p;
cur--;
pre-=an[cur].p;
int t=an[cur+].x-an[cur].x;
add-=an[cur].p*t;
add+=an[cur+].p*t;
add-=pre*t;
add+=(suf-an[cur+].p)*t;
}
dp[i][j]=min(dp[i][j],dp[k][j-]+add);
}
}
}
printf("%.2lf\n",dp[n][m]);
}
return ;
}
hdu 4412 Sky Soldiers DP的更多相关文章
- hdu 4412 Sky Soldiers(区间DP)
Sky Soldiers Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- 【HDOJ】4412 Sky Soldiers
1. 题目描述有$k$个伞兵跳伞,有$m$个汇点.当伞兵着陆后,需要走向离他最近的汇点.如何选择这$m$个结点,可以使得士兵最终行走的距离的期望最小.求这个最小的期望. 2. 基本思路假设已经选好了这 ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 4778 状压DP
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
- HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)
HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解) 题意分析 要先排序,在做01背包,否则不满足无后效性,为什么呢? 等我理解了再补上. 代码总览 #in ...
- HDOJ(HDU).2546 饭卡(DP 01背包)
HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...
- HDOJ(HDU).2602 Bone Collector (DP 01背包)
HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...
- HDOJ(HDU).1058 Humble Numbers (DP)
HDOJ(HDU).1058 Humble Numbers (DP) 点我挑战题目 题意分析 水 代码总览 /* Title:HDOJ.1058 Author:pengwill Date:2017-2 ...
随机推荐
- ADO.NET笔记——将DataReader作为函数返回值
相关知识: 在很多情况下,可能把数据库的访问封装到一个函数中,通过该函数返回一个DataReader对象给调用者.例如定义函数:SqlDataReader returnDR(),然后再Main函数中调 ...
- CenterOS中安装Redis及开机启动设置
Redis安装 从官方下载最新Redis进行安装,官网地址:http://redis.io/download $ wget http://download.redis.io/releases/redi ...
- MIT Scheme 的基本使用
MIT Scheme 的基本使用 安装和启动 启动 在 Windows 下正确安装 MIT Scheme 系统后,程序菜单里将有一个 MIT Scheme 目录,其中包含: Documentation ...
- Python标准库之urllib,urllib2自定义Opener
urllib2.urlopen()函数不支持验证.cookie或者其它HTTP高级功能.要支持这些功能,必须使用build_opener()函数创建自定义Opener对象. 1. build_open ...
- C# 刷票程序
上个月有人让我帮忙投票,我想要不写个程序给他多刷点得了,虽然这事情有悖原则,就当娱乐了.. 先上图 1.分析 既然是网页投票,那肯定可以伪造HTTP请求来实现刷票.需要分析的就是该网站到底采用了哪些防 ...
- 查看leapmotion的frame信息
leapmotion的SDK里有个c#实例,很详细,其中的frame类已经把这些封装的很完善了.可惜是控制台的,运行时很难去找那些动作对应的哪些数据.我今天做的就是把它们在窗体控件里分别显示出来,这样 ...
- Operating Cisco Router
Operating Cisco Router consider the hardware on the ends of the serial link, in particular where the ...
- Seafile V4.1 安装笔记
yum -y install gcc gcc-c++ make cmake pcre pcre-devel expat expat-devel curl wget mlocate gd gd-deve ...
- Java 包(package)详解
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包也采用了树形目录的存储方式.同一 ...
- 斐波那契(Fibonacci)数列的七种实现方法
废话不多说,直接上代码 #include "stdio.h" #include "queue" #include "math.h" usin ...