这个题目要是顺着dp的话很难做,但是倒着推就很容易退出比较简单的关系式了。

dp[i]=min(dp[u]+(sum[u-1]-sum[i-1]+s)*f[i]);dp[i]代表从i到结尾需要花费的代价,sum[i]表示1到i的时间和,f[i]代表i到n的代价和。

然后对于i状态来说,j由于k等价于 (dp[j]-dp[k])/(sum[k-1]-sum[j-1])<f[i]

然后f[i]随着i递减而递增,所以就可以利用斜率优化的办法来搞了。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e4+9;
long long sum[maxn],f[maxn];
long long dp[maxn];
int que[maxn];bool chk1(int k,int j,int i)
{return (dp[j]-dp[k])<f[i]*(sum[k-1]-sum[j-1]);
}bool chk2(int k,int j,int i)
{return ((dp[j]-dp[k])*(sum[j-1]-sum[i-1]))>((dp[i]-dp[j])*(sum[k-1]-sum[j-1]));
}int main()
{int n,s;while(scanf("%d %d",&n,&s)!=EOF){sum[0]=0;for(int i=1;i<=n;i++){scanf("%lld %lld",&sum[i],&f[i]);sum[i]+=sum[i-1];}for(int i=n-1;i>=1;i--) f[i]+=f[i+1];int front=1,end=0;que[++end]=n+1;dp[n+1]=0;for(int i=n;i>=1;i--){while(front<end&&chk1(que[front],que[front+1],i))front++;int u=que[front];dp[i]=dp[u]+(sum[u-1]-sum[i-1]+s)*f[i];while(front<end&&chk2(que[end-1],que[end],i))end--;que[++end]=i;}printf("%lld\n",dp[1]);}return 0;
}

poj 1180 斜率优化dp相关推荐

  1. 逊哥dp专题 总结(普通dp,斜率优化dp,数位dp)

    dp真是博大精深,本渣自叹智商不足,但是就算是不足也要拼死一搏,怒燃之 poj 3934 题意:给你n个身高都不同的人,然后排队,如果两人之间的所有人都比他们俩矮,那么他们俩可以互相看见,问你如果要正 ...

  2. NOI2007 货币兑换 - CDQ分治斜率优化dp

    斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...

  3. CF-311B Cats Transport(斜率优化DP)

    题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...

  4. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)

    点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...

  5. HDU-3507Print Article 斜率优化DP

    学习:https://blog.csdn.net/bill_yang_2016/article/details/54667902 HDU-3507 题意:有若干个单词,每个单词有一个费用,连续的单词组 ...

  6. APIO2010 特别行动队 斜率优化DP算法笔记

    做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...

  7. HDU 3507 Print Article(斜率优化DP)

    题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...

  8. HDU 2993 MAX Average Problem(斜率优化DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 题目大意:给定一个长度为n(最长为10^5)的正整数序列,求出连续的最短为k的子序列平均值的最大 ...

  9. YBTOJ洛谷P3195:玩具装箱(斜率优化dp)

    传送门 文章目录 前言 解析 代码 前言 斜率优化dp,就是利用斜率优化的dp (逃) 解析 第一道斜优的题 分析题目 设sumisum_isumi​为1-i的c的前缀和 容易写出dp转移式: dpi ...

最新文章

  1. iexpress全力打造“免检”***
  2. 用GAN也可以P图,效果还不输PS | 英伟达出品
  3. oracle ora-24247 ACL,ORACLE 11G 存储过程发送邮件(job),ORA-24247:网络访问被访问控制列表 (ACL) 拒绝...
  4. c语言中虚函数和纯虚函数,虚函数和纯虚函数的区别是什么?
  5. 渴望 英语_渴望订阅– RxJava常见问题解答
  6. 创建vue项目(四)路由相关知识、路由守卫、插槽、打包小细节
  7. java构建xml参数_Java中使用XML创建EMAIL模板
  8. Hibernate缓存和加强
  9. matlab 模拟风,三维空间相关风场的计算机模拟及Matlab程序实现
  10. hud 3874 求区间内不同数字的和
  11. Leetcode961. N-Repeated Element in Size 2N Array重复N次的元素
  12. linux消息队列 性能,消息队列消息总大小的问题
  13. c语言黑熊,BLACK BRUIN黑熊扭矩马达C5510000AA
  14. 对序列化器、“对象”的理解
  15. Fresher的特殊求和
  16. MongoDB日期转换
  17. 苹果账号开启双重认证,以及如何在移动设备上同时添加私人账号和开发者账号
  18. 网路营销seo站群策略
  19. 【太虚AR_v0.1】使用教程 | 图像识别(多目标)
  20. c 当前程序的语言,c语言实现获取macos当前的系统语言

热门文章

  1. android 人机界面设计规范,iPhone 人机界面设计规范(中英对照)
  2. linux 终端必须退出 history才会记录吗,Linux随笔 - linux 多个会话同时执行命令后history记录不全的解决方案【转载】...
  3. android 自动化测试_Android自动化测试探索之代码覆盖率统计
  4. JS当中的无限分类递归树
  5. 研究生就业竞争力弱化 “皇帝女儿也愁嫁”
  6. vue_cli全局变量使用
  7. Hyperledger fabric学习笔记(一)
  8. Python学习笔记之if语句(一)
  9. Oracle导出导入dmp文件(exp.imp命令行)
  10. python基础语法类型_Python基础入门语法和变量类型(一)