思路:

这题和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;
],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();
        ;
        ;i<=n;i++)
        {
            scanf("%d",&l);
            while(l--)
            {
                scanf("%d%lf",&x,&cc);
                vi[x]+=cc;
            }
        }
        ;
        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;
        ;i--)
        {
            l=r=sum=;
            r=p[i].p;
            pos=i;
            ;j>=;j--)
            {
                l+=p[j].p;
                sum+=p[j].p*(p[pos].x-p[j].x);
                &&(t=(r-l)*(p[pos].x-p[pos-].x))<)
                {
                    sum+=t;
                    pos--;
                    l-=p[pos].p;
                    r+=p[pos].p;
                }
                cost[j][i]=sum;
            }
        }
        ;i<=cnt;i++)
            dp[i][]=cost[][i];
        ;i<=m;i++)
            dp[][i]=;
        ;k<=m;k++)
        {
            ;i<=cnt;i++)
            {
                ;continue;}
                dp[i][k]=1e20;
                ;j>=;j--)
                    dp[i][k]=min(dp[i][k],dp[j][k-]+cost[j+][i]);
            }
        }
        printf("%.2lf\n",dp[cnt][m]);
    }
    ;
}

hdu 4412 利用单调性的动态规划的更多相关文章

  1. HDU 1176 免费馅饼 (动态规划)

    HDU 1176 免费馅饼 (动态规划) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼 ...

  2. HDU 1074 Doing Homework (动态规划,位运算)

    HDU 1074 Doing Homework (动态规划,位运算) Description Ignatius has just come back school from the 30th ACM/ ...

  3. hdu 4412 Sky Soldiers DP

    动态规划,主要是用单调性求区间的最小期望. 代码如下: #include<iostream> #include<stdio.h> #include<algorithm&g ...

  4. HDU 1003 Max Sum【动态规划求最大子序列和详解 】

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. HDU 5433 Xiao Ming climbing 动态规划

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5433 Xiao Ming climbing Time Limit: 2000/1000 MS (Ja ...

  6. hdu 1421:搬寝室(动态规划 DP + 排序)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. ACM学习历程—HDU 5534 Partial Tree(动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题目大意是给了n个结点,让后让构成一个树,假设每个节点的度为r1, r2, ...rn,求f(x ...

  8. hdu 4412 2012杭州赛区网络赛 期望

    虽然dp方程很好写,就是这个期望不知道怎么求,昨晚的BC也是 题目问题抽象之后为:在一个x坐标轴上有N个点,每个点上有一个概率值,可以修M个工作站, 求怎样安排这M个工作站的位置,使得这N个点都走到工 ...

  9. hdu 1159:Common Subsequence(动态规划)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

随机推荐

  1. 无需cygwin,使用NDK进行开发

    NDK从7开始自带编译器,在windows上无需配置cygwin的环境. 在eclips中配置NDK路径 在eclipse中点击菜单栏window-Perferences,配置NDK的路径. 在工程中 ...

  2. kvc kvo(摘录)

    概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...

  3. Shell中的函数

    一.在脚本中定义函数 与变量一样,在使用函数之前应该对函数进行定义.与其他编程类语言相比,由于没有数据类型的概念,因此也不必定义函数的类型. (1)在脚本中可以使用以下方式定义函数: function ...

  4. TextView之一:子类的常用属性

    TextView常见的子类包括EditText,Button,CheckBox, RadioButton等. 1.EditText EditText继承自TextView,因此TextView所有属性 ...

  5. v-for并判断当前元素是否选中:$set实现响应添加属性

    前言 一直纠结着使用v-for进行列表渲染时如何为当前的元素添加是否选中的标识. 1.v-for进行列表渲染 <div class="lists"> <ul> ...

  6. python while 循环语句

    Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句-- 执行语句可以是单个语句或语句 ...

  7. python小白——进阶之路——day2天-———容器类型数据(list,set ,tuple,dict,str)

    #容器类型数据 : list tuple # ###列表的特性:可获取,可修改,有序 # 声明一个空列表 listvar = [] print(listvar,type(listvar)) # (1) ...

  8. C# 多线程及同步简介示例

           60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建.撤消与切换存在较大的时空开销,因此需要引入轻型进程: ...

  9. [adminstrative][CentOS] CentOS 7 常用操作笔记

    CentOS从6换到7, 还没有系统的学习.虽然主要用的是systemd,但还是有一下特有的区别,会逐步整理如下: 官网文档索引:https://access.redhat.com/documenta ...

  10. 【Python爬虫实战】多线程爬虫---糗事百科段子爬取

    多线程爬虫:即程序中的某些程序段并行执行,合理地设置多线程,可以让爬虫效率更高糗事百科段子普通爬虫和多线程爬虫分析该网址链接得出:https://www.qiushibaike.com/8hr/pag ...