题目链接

第一道自己推的斜率优化dp><

首先要明确一点:装进同一个容器的toys一定要是连着的几个(否则的话可以直接贪心)-->之前理解错题意WA了一次......

用sum[i]表示前缀和,f[i]表示前i个装进容器的最小费用,

容易知道

  f[i]=max(f[i],f[j]+(sum[i]-sum[j]+i-(j+1)-l)2)(j<i)

令k<j<i,若要使f[j]>f[k],则需要满足:

  f[j]+(sum[i]-sum[j]+i-(j+1)-l)2<f[k]+(sum[i]-sum[k]+i-(k+1)-l)2

t[i]=sum[i]+i,则移项,可得:

  f[j]-f[k]+(t[j]-t[k])*(t[j]+t[k])<2(t[i]-l-1)(t[j]-t[k])

即:

  (f[j]-f[k]+t[j]2-t[k]2)/(t[j]-t[k])<2*(t[i]-l-1)

g[i]=f[i]+t[i]2,则有

  (g[j]-g[k])/(t[j]-t[k])<2*(t[i]-l-1)。

用s(i,j)表示i到j连线的斜率,

对于一个单调队列,每次对于队首,若s(q[h],q[h+1])<2*(ti-l-1),则此时的q[h]一定不会是现在和以后的最优解,h++;

对于队尾,若s(q[t-2],q[t-1])>s(q[t-1],i),如果s(q[t-2],q[t-1])<2*(t[i]-l-1),则s(q[t-1],i)<2*(t[i]-l-1),由i>q[t-1]可知此时i比q[t-1]要优;如果s(q[t-2],q[t-1])>2*(t[i]-l-1),则q[t-2]要比q[t-1]优。所以无论如何q[t-1]都不会是最优解,此时t--。

接着就是斜率优化dp的套路了:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 typedef long long LL;
 5 const int maxn=5e4+5;
 6 using namespace std;
 7 LL a[maxn],q[maxn],sum[maxn],g[maxn],t[maxn],f[maxn];
 8 inline LL read()
 9 {
10     LL anss=0,f=1;char c=getchar();
11     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
12     while(c>='0'&&c<='9'){anss=anss*10+c-48;c=getchar();}
13     return anss*f;
14 }
15 inline double cal(LL a,LL b)
16 {
17     return 1.0*(g[a]-g[b])/(t[a]-t[b]);
18 }
19 int main()
20 {
21     int n,l;
22     sum[0]=0;
23     scanf("%d %d",&n,&l);
24     for(int i=1;i<=n;i++){
25         a[i]=read();
26         sum[i]=sum[i-1]+a[i];
27         t[i]=sum[i]+i;
28     }
29     int h=0,ta=1;q[0]=0;
30     for(int i=1;i<=n;i++)
31     {
32         while(h<ta-1&&cal(q[h],q[h+1])<2*(t[i]-l-1))h++;
33         f[i]=f[q[h]]+(t[i]-t[q[h]]-l-1)*(t[i]-t[q[h]]-l-1);
34         g[i]=f[i]+t[i]*t[i];
35         while(h<ta-1&&cal(q[ta-1],q[ta-2])>cal(q[ta-1],i))ta--;
36         q[ta++]=i;
37     }
38     printf("%lld",f[n]);
39     return 0;
40 }

bzoj1010

转载于:https://www.cnblogs.com/JKAI/p/7460495.html

【bzoj1010】玩具装箱toy——斜率优化dp相关推荐

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

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

  2. 『玩具装箱TOY 斜率优化DP』

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

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

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

  4. BZOJ1010:[HNOI2008]玩具装箱TOY(斜率优化DP)

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

  5. 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP

    题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...

  6. 【BZOJ1010】【codevs1319】玩具装箱,斜率优化DP

    传送门1 传送门2 写在前面:好像double要比long long快? 思路:想拿来练手的斜率优化DP,却忘记了一些基本原则,好坑 基本的DP转移 f[i]=min(f[j]+(sum[i]−sum ...

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

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

  8. [Bzoj1010][HNOI2008]玩具装箱toy(斜率优化)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1010 首先预处理前缀和sum[i],然后推出初始的dp方程,dp[i]表示装前i件物品的 ...

  9. P3195-[HNOI2008]玩具装箱【斜率优化dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3195 题目大意 nnn个物品,分成若干段,每一段的长度为j−i+∑i=lrCkj-i+\sum_{i=l}^rC ...

最新文章

  1. 公司电脑用域账号访问团队文件夹
  2. python windows窗口置顶_想用Python编程却不知如何下手?一篇搞定编程准备工作
  3. 端上智能——深度学习模型压缩与加速
  4. 序列二次规划_最优控制与规划
  5. 使用Varnish代替Squid做网站缓存加速器的详细解决方案
  6. Linux 6.4 partprobe出现warning问题
  7. 接口implements
  8. Bugku-Web-xxx二手交易市场
  9. python 新建文件 hdfs_python使用hdfs3模块对hdfs进行操作详解
  10. Unity3D学习笔记(三十七):顶点偏移和溶解
  11. java后台对接app微信支付
  12. laravel-excel 中设置列宽,单元格内容垂直和水平都居中
  13. CMCT-FA修饰阿霉素纳米脂质体/ADR-HAS-MS单抗Hab18偶联阿霉素人血清白蛋白微球的制备方法
  14. 饥荒 阿里云服务器搭建记录
  15. 总线揭密 串行传输VS并行传输
  16. linux 内核调试 booting the kernel.,booting the kernel后无内核启动信息的调试方法
  17. 小米电视1代上半屏背光闪的问题解决
  18. 辰视携3D机器视觉技术亮相第九届中国电子信息博览会
  19. Milvus 2.0 Knowhere 概览
  20. 计算机基础教学改革申报书,混合教学试点课程改革项目申报书-《计算机文化基础》...

热门文章

  1. shell_之_find(查找)
  2. 一次难忘的 MTS 故障的排除过程
  3. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
  4. 谈谈Javascript中那些For循环的事
  5. Web前端开发——BAT面试题汇总及答案01
  6. 【转】深入分析JAVA IO(BIO、NIO、AIO)
  7. Laravel用post提交表单常见的两个错误
  8. 银行科技管理工作优化提升之我见
  9. [Math]添加了一个EulerProject标志
  10. IIS的Windows集成身份验证总结