能够非常好的证明单调决策性质。用   记sum[i]=sigma(C[1],C[2].....C[k]);f[i]=sum[i]+i;  c=l-1;

有转移dp[i]=min( dp[j]+(f[i]-f[jk]-c)^2);  假死 有2个决策j<k, 对于i点。k决策更优秀 于是能够得到

dp[k]+(f[i]-f[k]-c)^2<dp[j]+(f[i]-f[j]-c)^2;

对于一个x>i  如果f[x]=f[i]+v;对于决策j,k。若决策k优于决策j  ,必定

dp[k]+(f[x]-f[k]-c)^2<dp[j]+(f[x]-f[j]-c)^2;

于是dp[k]+(f[i]+v-f[k]-c)^2<dp[j]+(f[i]-v-f[j]-c)^2;

仅仅要2v(f[i]-f[k]-c)+v^2<2v(f[i]-f[j]-c)

优于v>0   f[k]>f[j]  这是必定成立的  ,所以能够非常好的证明单调决策性质。然后能够依据《1D/1D动态规划初步》论文的写法做。

#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 = 500010;
LL C[mmax];
LL dp[mmax];
LL sum[mmax];
int n;
LL L;
struct node
{
int l,r;
int d;
node() {}
node(int l,int r,int d):l(l),r(r),d(d) {}
void print()
{
printf("%d %d %d\n",l,r,d);
}
}Q[mmax];
LL sqr(LL x)
{
return x*x;
}
void up(int i,int j)
{
dp[i]=dp[j]+sqr(sum[i]-sum[j]+i-j-1-L);
}
bool ok(int i,int j,int d)
{
return dp[d]+sqr(sum[i]-sum[d]+i-d-1-L)>=dp[j]+sqr(sum[i]-sum[j]+i-j-1-L);
}
int find(int l,int r,int j,int d)
{
int mid;
r++;
while(l<r)
{
mid=(l+r)>>1;
if(ok(mid,j,d))
r=mid;
else
l=mid+1;
}
return r;
}
void make()
{
int head=0,tail=0;
dp[0]=0;
Q[tail++]=node(0,n,0);
for(int i=1;i<=n;i++)
{
while(Q[head].r<i)
head++;
if(Q[head].l<i)
Q[head].l=i;
up(i,Q[head].d);
int tmp=0;
while(head<tail)
{
if(ok(Q[tail-1].l,i,Q[tail-1].d))
{
tmp=Q[tail-1].l;
tail--;
}
else
{
tmp=find(Q[tail-1].l,Q[tail-1].r,i,Q[tail-1].d);
Q[tail-1].r=tmp-1;
break;
}
}
if(tmp<=n)
Q[tail++]=node(tmp,n,i);
}
}
int main()
{ while(cin>>n>>L)
{
sum[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&C[i]);
sum[i]=sum[i-1]+C[i];
}
make();
printf("%lld\n",dp[n]);
}
return 0;
}

最新文章

  1. 用Vagrant和Ansible搭建持续交付平台
  2. nginx日志轮巡切割
  3. JAVA file文件操作
  4. INSTALLMENT of QValue
  5. How To Use Hbase Bulk Loading
  6. php5.2.6+apache2.2.15配置
  7. ffmpeg显示视频
  8. poj 1850 code(组合数学)
  9. 什么是目标、度量、KPI、维度和细分
  10. poj3617Best Cow Line
  11. IOS开发-ObjC-Category的使用
  12. 设计模式(6)--Adapter(适配器模式)--结构型
  13. PHP初入,简易网页整理(布局&amp;特效的使用)
  14. 【Unity Shaders】使用Unity Render Textures实现画面特效——建立画面特效脚本系统
  15. 第十六单元 yum管理RPM包
  16. 孤岛营救问题 (BFS+状压)
  17. ROS 双目标定
  18. (转)sublime text3简体中文版汉化教程
  19. HSRP vs VRRP
  20. robot framework + python实现http接口自动化测试框架

热门文章

  1. Python2.* object类............
  2. POJ 2228 Naptime(DP+环形处理)
  3. python 序列化和反序列化
  4. OpenResty.spec
  5. Mysql学习总结(26)——MySQL子查询
  6. 作为一名Android APP开发者的自我总结
  7. MYSQL学习笔记三:日期和时间函数
  8. android开发游记:ItemTouchHelper 使用RecyclerView打造可拖拽的GridView
  9. Ryu基本操作的REST API调用演示样例
  10. HDU 5344(MZL&amp;#39;s xor-(ai+aj)的异或和)