动态规划,主要是用单调性求区间的最小期望。

代码如下:

 #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的更多相关文章

  1. hdu 4412 Sky Soldiers(区间DP)

    Sky Soldiers Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  2. 【HDOJ】4412 Sky Soldiers

    1. 题目描述有$k$个伞兵跳伞,有$m$个汇点.当伞兵着陆后,需要走向离他最近的汇点.如何选择这$m$个结点,可以使得士兵最终行走的距离的期望最小.求这个最小的期望. 2. 基本思路假设已经选好了这 ...

  3. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  4. hdu 2296 aC自动机+dp(得到价值最大的字符串)

    Ring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  6. HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)

    HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解) 题意分析 要先排序,在做01背包,否则不满足无后效性,为什么呢? 等我理解了再补上. 代码总览 #in ...

  7. HDOJ(HDU).2546 饭卡(DP 01背包)

    HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...

  8. HDOJ(HDU).2602 Bone Collector (DP 01背包)

    HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...

  9. HDOJ(HDU).1058 Humble Numbers (DP)

    HDOJ(HDU).1058 Humble Numbers (DP) 点我挑战题目 题意分析 水 代码总览 /* Title:HDOJ.1058 Author:pengwill Date:2017-2 ...

随机推荐

  1. Linux下OpenCV的环境搭建

    OpenCV is the most popular and advanced code library for Computer Vision related applications today, ...

  2. .NET4.5可以给所有线程设置默认的Culture了

    How to set CurrentCulture for all threads in a domain in .NET 4.5 Before .NET 4.5 if we wanted to se ...

  3. 如何将HDL文件实例化到XPS中

     本文转载自:http://xilinx.eetrend.com/blog/7073 硬件平台:ZedBoard 开发环境:XPS + ISE 操作系统:WinXP SP3 一直说要研究官方的例子 ...

  4. Func 委托

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. php保存base64数据

    php保存base64数据 if(isset($param['cover_pic']) && !empty($param['cover_pic'])) {
 if (preg_matc ...

  6. php学习日志(5)-解决Windows Live Writer错误:WindowsLive.Writer.CoreServices.HttpRequestHelper的类型初始值设定发生异常

    以前用Windows Live Writer写日志都好好的,前几天用写完日志,点击发布,突然弹出意外错误:“WindowsLive.Writer.CoreServices.HttpRequestHel ...

  7. 管道和FIFO

    pipe 子进程从终端读取一个文件名, 通过管道将文件名传递给父进程 父进程收到文件名后, 读取文件内容并通过管道传递给子进程 子进程接收到文件内容并输出到终端 #include <stdio. ...

  8. DRP PK 牛腩新闻发布系统

    一.JSP与ASP (1)Web服务器的支持:大多数通用的Web服务器如:Apache.Netscape和Microsoft IIS都支持JSP页面,只有微软本身的Microsoft IIS和Pers ...

  9. xk01创建供应商保存的时候,提示错误“科目800001已经存在”

    解决方法:

  10. SqlServer里DateTime转字符串

    Select CONVERT(varchar(100), GETDATE(), 8):14:53:14 Select CONVERT(varchar(100), GETDATE(), 9): 06  ...