hdu2829(斜率dp)
来源:互联网 发布:创优网络 编辑:程序博客网 时间:2024/05/21 07:01
链接:点击打开链接
题意:给定一个长度为n的序列,将序列分成m段,每段序列都有权值,权值为序列内两个数两两相乘之和,输出最小的权值
代码:
#include <math.h>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int a[1005],q[1005];long long w[1005],s[1005],dp[1005][1005];long long getx(int x){ return w[x];}long long gety(int x,int y){ return dp[x][y]+(w[y]*w[y]+s[y])/2;}int cross(int x1,int y1,int x2,int y2,int x3,int y3){ return (y3-y1)*(x2-x1)-(y2-y1)*(x3-x1);}int main(){ int i,j,k,n,m,t,cas,head,tail; while(scanf("%d%d",&n,&m)!=EOF&&(m||n)){ m++; w[0]=s[0]=0; //dp[i][j]表示到j分成了i段的代价,这个题数据 for(i=1;i<=n;i++){ //范围为O(n*n*n) scanf("%d",&a[i]); //而转移方程为dp[i][j]=min(dp[i-1][k]+((w[j]-w[k])^2-(s[j]-s[k]))/2) w[i]=w[i-1]+a[i]; //恰好可以用斜率优化 s[i]=s[i-1]+a[i]*a[i]; //w[i]为前缀和,s[i]为前缀平方和 } //展开后 y=dp[i-1][k]+(w[k]^2+s[k])/2 memset(dp,0,sizeof(dp)); //k=w[j] x=w[k] for(i=1;i<=n;i++) dp[1][i]=((w[i]-w[0])*(w[i]-w[0])-(s[i]-s[0]))/2; for(i=2;i<=m;i++){ head=tail=0; for(j=1;j<=n;j++){ k=w[j]; while((head+1<tail)&&cross(getx(q[tail-2]),gety(i-1,q[tail-2]),getx(q[tail-1]),gety(i-1,q[tail-1]),getx(j),gety(i-1,j))<=0) tail--; q[tail++]=j; //维护一个凸包 while((head+1<tail)&&((gety(i-1,q[head+1])-gety(i-1,q[head]))<=k*(getx(q[head+1])-getx(q[head])))) head++; //找出切点 dp[i][j]=gety(i-1,q[head])-k*getx(q[head]); dp[i][j]+=(w[j]*w[j]-s[j])/2; } } printf("%I64d\n",dp[m][n]); } return 0;}
0 0
- hdu2829(斜率dp)
- hdu2829 Lawrence 斜率优化DP
- #HDU2829#Lawrence(DP+ 斜率优化)
- hdu2829之二维斜率优化DP
- hdu2829 四边形优化dp
- HDU2829 浅谈四边形优化DP
- 斜率dp
- dp+四边形不等式优化(poj1160 hdu2829 3480 3506 3516)
- 【HDU2829】Lawrence-DP+四边形不等式优化+前缀和
- DP(斜率优化)
- 【斜率优化DP】Batch_Scheduling
- dp优化--斜率
- 斜率优化DP
- 斜率优化DP
- hdu3507斜率优化dp
- DP斜率优化总结
- hdu3480 斜率优化dp
- hdu3045之斜率DP
- Mongodb入门(1) --- 介绍,安装,启动
- 机器学习小组知识点8:掷硬币实验二项式分布代码实现(C++语言)
- Nearest Common Ancestors--LCA
- 自定义对象、prototype原型属性
- Bootstrap fileinput 删除回调事件处理
- hdu2829(斜率dp)
- 1521连接数过多处理
- 欢迎使用CSDN-markdown编辑器
- 打造百亿级数据处理量的弹性调度容器平台
- Android实战——GsonFormat、Gson、fastjson快速搞定JSON数据解析
- Mongodb入门(2) --- 常用操作
- 斐波那契数列
- Android 源码编译时collect2: ld terminated with signal 9 [Killed] 错误的处理
- android 使用shape自定义圆角矩形