斜率优化问题一般都是决策单调问题。对于这题能够证明单调决策。

令sum[i]=sigma(c [k] ) 1<=k<=i  ,  f[i]=sum[i]+i ,  c=L+1;

首先我们能够写出转移方程  dp[i] = min( dp[j] + (f[i]-f[j]-c)^2 )  。令决策j1<j2。若决策j2更优有

dp[j2]+(f[i]-f[j2]-c)^2<=dp[j1]+(f[i]-f[j1]-c)^2

能够得带 ((dp[j2]+f[j2]^2)-(dp[j1]+f[j1]^2)  )/(f[j2]-f[j1])<2*(f[i]-c)。

优于f[i]是递增的,所以对于t>i的点。决策j2总是比j1更优。那么j1实际上能够从决策集合中删除。后面的就能够用一个队列维护了。

<span style="font-size:14px;">#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <string>
#include <cctype>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int inf  = 0x3fffffff;
const int mmax =50010;
LL C[mmax];
LL L,c;
LL sum[mmax],f[mmax],dp[mmax];
LL sqr(LL x)
{return x*x;
}
double G(int x)
{return 1.0*f[x]*f[x]+dp[x];
}
double S(int x)
{return 2.0*f[x];
}
void calc(int i,int j)
{dp[i]=dp[j]+sqr(f[i]-f[j]-c);
}
int Q[mmax];
int main()
{int n;while(cin>>n>>L){c=L+1;sum[0]=0;f[0]=0;for(int i=1;i<=n;i++){scanf("%lld",&C[i]);sum[i]=sum[i-1]+C[i];f[i]=sum[i]+i;}int head=0,tail=-1;dp[0]=0;Q[++tail]=0;for(int i=1;i<=n;i++){while(head<tail){double tmp=1.0*(G(Q[head+1])-G(Q[head]))/(S(Q[head+1])-S(Q[head]));if(tmp<=f[i]-c)head++;elsebreak;}calc(i,Q[head]);while(head<tail){double tmp1=1.0*(G(Q[tail])-G(Q[tail-1]))/(S(Q[tail])-S(Q[tail-1]));double tmp2=1.0*(G(i)-G(Q[tail]))/(S(i)-S(Q[tail]));if(tmp1>=tmp2)tail--;elsebreak;}Q[++tail]=i;}printf("%lld\n",dp[n]);}return 0;
}
</span>

转载于:https://www.cnblogs.com/yangykaifa/p/6780636.html

[HNOI2008]玩具装箱toy(dp+斜率优化)相关推荐

  1. BZOJ1010 [HNOI2008]玩具装箱toy 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8687797.html 题目传送门 - BZOJ1010 题意 一个数列$C$,然后把这个数列划分成若干段. 对于 ...

  2. bzoj 1010: [HNOI2008]玩具装箱toy(斜率dp)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 10837  Solved: 4513 [Submit] ...

  3. P3195 [HNOI2008]玩具装箱TOY DP+优化

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  4. BZOJ-1010 玩具装箱toy (斜率优化)

    题目大意:将n个数分成若干组,并且每组的数在原数组中应是连续的,每组会产生的代价为sum(i)-sum(j)+i-j-1-m,m为已知的常数.求最小代价. 题目分析:定义dp(i)表示将前 i 个元素 ...

  5. bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 11893  Solved: 5061 [Submit] ...

  6. 1010 [HNOI2008]玩具装箱toy

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MB Description P教授要去看奥运,但是他舍不下他的玩具,于是他决 ...

  7. P3195 [HNOI2008]玩具装箱TOY

    P3195 [HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的 ...

  8. [HNOI2008]玩具装箱toy

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 10286  Solved: 4215 [Submit] ...

  9. bzoj 1010: [HNOI2008]玩具装箱toy 2011-12-27

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2254  Solved: 744 [Submit][S ...

  10. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化dp

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

最新文章

  1. SSM-SpringMVC-16:SpringMVC中小论注解式开发之访问方式篇
  2. [原创].七段数码管驱动,Verilog版本
  3. UNIX(多线程):23---线程池注意事项和常见问题
  4. C语言位域(位段)详解
  5. hexbin_Power BI Desktop中的Hexbin散点图
  6. PCA 主成分分析Principal components analysis
  7. python爬app视频_python爬取抖音APP视频教程
  8. C语言scanf中%%,C语言scanf()和gets()及printf()和puts()的区别
  9. 使用GDB进行调试 -- 1 应用场景
  10. C语言编程学习的经验
  11. wieshark导出ftp文件_【FTP】Wireshark学习FTP流程
  12. RTOS 诊断和错误检查
  13. vue实现一键回到顶部
  14. 2022年必备的加密行业术语大全,你了解有多少?
  15. 16S OTU物种注释
  16. 【区块链】【IOT】深度解读物联网区块链“IOTA”:不仅解决IoT痛点,还解决区块链痛点
  17. 办公技巧——PPT添加页码
  18. Oracle笔记_日期相关
  19. 好心情:长期心情不好就是抑郁症?
  20. 您是否在找这样的软件:

热门文章

  1. Ctrl+F5不能使用的问题
  2. Vue表单类的父子组件数据传递示例_vue.js_脚本之家
  3. 2 中间件的使用、异步action的创建
  4. ES5-5 参数默认值、递归、预编译、暗示全局变量
  5. 开发人员MySQL调优-理论篇
  6. shell中字分隔的妙用:变量IFS
  7. ubuntu远程桌面连接命令rdesktop连接windows远程桌面详解
  8. jQuery attr removeAttr 属性操作
  9. JavaScript复制数组
  10. jqGrid细节备注—pager文字的设置,更改默认的提交方式