【斜率优化】BZOJ1010 [HNOI2008]玩具装箱toy
2016-05-14 19:57
399 查看
【题目大意】
P教授有编号为1...N的N件玩具,第i件玩具长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。如果将第i件玩具到第j个玩具放到一 个容器中,那么容器的长度将为 x=j-i+Sigma(Ck) i<=K<=j 制作容器的费用与容器的长度有关, 如果容器长度为x,其制作费用为(X-L)^2.其中L是一个常量。求最小费用。
【思路】
懒得说了,把WC宋新波老师的课件搬运一下。
宋新波老师讲的很好,WC的时候第一次听斜率优化听他讲完秒懂了,时隔几个月再来消化一下。
P教授有编号为1...N的N件玩具,第i件玩具长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。如果将第i件玩具到第j个玩具放到一 个容器中,那么容器的长度将为 x=j-i+Sigma(Ck) i<=K<=j 制作容器的费用与容器的长度有关, 如果容器长度为x,其制作费用为(X-L)^2.其中L是一个常量。求最小费用。
【思路】
懒得说了,把WC宋新波老师的课件搬运一下。
宋新波老师讲的很好,WC的时候第一次听斜率优化听他讲完秒懂了,时隔几个月再来消化一下。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int MAXN=50000+50; int n,l; int c[MAXN]; LL s[MAXN],g[MAXN],x[MAXN],y[MAXN],f[MAXN]; LL square(LL x) { return x*x; } double slop(int i,int j) { return ((y[j]-y[i])/(x[j]-x[i])); } void dp() { memset(f,0,sizeof(f)); int head=0,tail=0; int q[MAXN]; q[head]=0; for (int i=1;i<=n;i++) { y[i]=f[i-1]+square(x[i]); while (head+1<tail && slop(q[tail-2],q[tail-1])>slop(q[tail-1],i)) tail--; q[tail++]=i; while (head+1<tail && slop(q[head],q[head+1])<2.0*g[i]) head++; f[i]=f[q[head]-1]+square(g[i]-x[q[head]]); } } void init() { scanf("%d%d",&n,&l); memset(s,0,sizeof(s)); for (int i=1;i<=n;i++) { scanf("%d",&c[i]); s[i]=s[i-1]+c[i]; g[i]=s[i]+i-l; x[i]=s[i-1]+i; } } void printans() { printf("%lld",f ); } int main() { init(); dp(); printans(); return 0; }
相关文章推荐
- 使用hexo搭建博客并上传GitHub
- 在windows7中配置cocos2dx开发环境
- XML_Java_ XML_利用Jdom(Java)解析xml文件 示例
- QT——快捷键
- 第十一周进度条
- 斐波那契数列(Fibonacci sequence)的前200项
- Codeforces Round #246 (Div. 2) C. Prime Swaps
- MySQL SQL优化
- spring hibernate 批量插入jdbc及hibernate方法
- 关于编码转换
- vim基础学习
- Matlab读取excel数据,并绘图生成exe可执行文件
- Problem3-1011
- 新手学习wpf button中篇实例学习 等级4
- ARM9汇编——关键字
- Android5种方式存储数据:
- Android控件架构与自定义控件详解(二)——自定义View
- 在Maven项目中加载spring中的bean的配置xml文件会提示找不到解决方法
- GitHub排名前100的Android开源库
- debian8.4下安装Snort处理tcpdump文件技术细节