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 ...
随机推荐
- 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法
$x_pi = 3.14159265358979324 * 3000.0 / 180.0; //火星坐标系 (GCJ-02)转百度坐标系 (BD-09)算法 function bd_encrypt($ ...
- c++11:function的用法
function是函数.函数对象.函数指针.和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针 普通函数 #include <functional> voi ...
- javascript中的光标
最近项目中要做一个键盘操作,光标移动的功能:增强用户体验:问朋友查资料了解到这方面的知识:整理备忘: 1.IE使用textRange对象,其他使用selectionStart selectionEnd ...
- 9更令人兴奋的WebGL演示
Firefox OS,asm.js和推动浏览器性能改进,画布和WebGL技术是打开一个世界的可能性.我上9令人兴奋的帆布演示,然后把它与9 WebGL演示,但我想超越这篇文章.我发现9个更多的精神We ...
- 利用dropbox备份vps数据
在VPS的数据最好定时备份,免得服务器出了什么问题,数据就全丢了.我使用dropbox定时同步wordpress文件夹和数据库信息. 首先下载dropbox ? 1 wget -O dropbox.t ...
- linux学习之进程,线程和程序
程序.进程和线程的概念 1:程序和进 ...
- [转]Linux下修改/设置环境变量JAVA_HOME
1. 永久修改,对所有用户有效 # vi /etc/profile //按键盘[Shift + g], 在profile文件最后添加下面的内容: export JAVA_HOME = /home/m ...
- Sqlite: unable to open database file
A database connect, there updated both queries (different statement, and regardless of order), after ...
- 20145120 《Java程序设计》第4周学习总结
20145120 <Java程序设计>第4周学习总结 教材学习内容总结 -定义子类,加"extends+父类名"以继承父类. -子类只能继承一个父类 -编辑器会检查等号 ...
- text-align:-moz-center与text-align:-webkit-center区别与用法
最近发现各浏览器的不兼容,关于text-align:center这个很多浏览器不兼容. 1.测试发现:text-align:center在IE下是管用的. 2.text-align:-moz-cent ...