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

题目分析:定义dp(i)表示将前 i 个元素分好组后产生的最小代价,状态转移方程很显然了:

dp(i)=min(dp(j)+[sum(i)-sum(j)+i-j-1-m)]^2)。另f(i)=sum(i)+i,并且另g(i)=f(i)-1-m,则dp(i)可整理成dp(i)=min(dp(j)+sum(j)^2-2*g(i)*sum(j))+g(i)。很显然需要斜率优化。

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
# define LL long longconst int N=50005;int n,m;
int q[N];
LL a[N];
LL dp[N];
LL sum[N];void read(LL &x)
{char ch=' ';while(ch<'0'||ch>'9')ch=getchar();x=0;while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
}void init()
{sum[0]=0;for(int i=1;i<=n;++i){read(a[i]);sum[i]=a[i]+sum[i-1];}for(int i=1;i<=n;++i)sum[i]+=i;
}LL getSon(int k,int j)
{return dp[j]-dp[k]+(sum[j]+sum[k])*(sum[j]-sum[k]);
}LL getMother(int k,int j)
{return 2*(sum[j]-sum[k]);
}double getK(int i,int j)
{return (double)getSon(i,j)/(double)getMother(i,j);
}LL toDp(int j,int i)
{return dp[j]+(sum[i]-sum[j]-m-1)*(sum[i]-sum[j]-m-1);
}LL solve()
{int head=0,tail=-1;q[++tail]=0;dp[0]=0;for(int i=1;i<=n;++i){while(head+1<=tail&&getK(q[head],q[head+1])<=sum[i]-m-1)++head;dp[i]=toDp(q[head],i);while(head+1<=tail&&getK(q[tail-1],q[tail])>getK(q[tail],i))--tail;q[++tail]=i;}return dp[n];
}int main()
{while(~scanf("%d%d",&n,&m)){init();printf("%lld\n",solve());}return 0;
}

  

转载于:https://www.cnblogs.com/20143605--pcx/p/5304427.html

BZOJ-1010 玩具装箱toy (斜率优化)相关推荐

  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. [Bzoj1010][HNOI2008]玩具装箱toy(斜率优化)

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

  6. 【bzoj1010】玩具装箱toy——斜率优化dp

    题目链接 第一道自己推的斜率优化dp>< 首先要明确一点:装进同一个容器的toys一定要是连着的几个(否则的话可以直接贪心)-->之前理解错题意WA了一次...... 用sum[i] ...

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

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

  8. P3195 [HNOI2008]玩具装箱TOY(斜率优化)

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

  9. 【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)

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

  10. HYSBZ 1010 玩具装箱toy (决策单调DP)

    题意: 有n个玩具,要将它们分为若干组,玩具长度C可能不同.给出n个玩具的摆放顺序,连续的任意多个玩具都可以成为一组.区间[i,j]成为一组的费用是cost=(j-i+Sigma(Ck)-L)2且i& ...

最新文章

  1. UVA 11983 Weird Advertisement
  2. 区块链常用架构是什么?它和保险业又如何结合?
  3. Android中使用AlarmManager设置闹钟
  4. IE9真的支持CSS3和HTML5?
  5. protobuf java service_【java】protoc不生成.proto中的service,只生成model相关类,求助。...
  6. 函数式编程-将Monad(单子)融入Swift
  7. vim 批量替换字符串_vim批量替换,效率就是高。附常用批量替换命令
  8. 程序的静态链接,动态链接和装载
  9. C#正则表达式通过HTML提取网页中的图片src
  10. 边缘计算对于基础架构和运营领导者意味着什么
  11. Linux进程、线程、任务调度(1)贵在坚持
  12. studio和solo哪个好_beats studio3 和solo3的区别再哪里?
  13. 什么软件可以测试睡眠质量心率,Beddit:粘在床上就能测试心率的睡眠监测器
  14. MyBatis 报错The error may exist in…….xml
  15. 使用爬虫抓取网易云音乐热门评论生成好玩的词云
  16. 2021年深圳南山区工业企业租金补贴申报时间及条件,补贴300万
  17. 详细教程!手把手教你制作个人微信红包封面
  18. Android studio gradle编译失败问题汇总
  19. HTML强制视频倍速,强行网页视频倍速播放
  20. sql注入bypass方法

热门文章

  1. CTFshow 文件上传 web167
  2. 用python tkinter显示Mandelbrot图
  3. [YTU]_2439( C++习题 复数类--重载运算符+)
  4. 2.1.1 Speed Limit
  5. 图像窗口方面 window
  6. 协变逆变java_Java中的逆变与协变
  7. php与mysql同步_php实现mysql同步的实现方法
  8. 【数据展示】matplotlib子图设置子标题(subtitle for subplot)
  9. 3.2.1 造成误差的原因分析
  10. js如何通过变量调用函数,函数名在变量里面