HDU 4258 Covered Walkway(斜率优化DP)
来源:互联网 发布:视频歌词制作软件 编辑:程序博客网 时间:2024/05/16 17:28
题目链接
和POJ 3709 K-Anonymous Sequence是完全类似的题目,只是状态方程变了而已。
dp[ i ] = min { dp[ j ] + (A[ i ] - A[ j + 1])*(A[ i ] - A[ j+1 ] ) + C | j<i }
单调队列维护下凸曲线。
记Y[ i ] = dp[ i ] + A[ i+1 ] *A[ i+1 ] , X[ i ] = A[ i+1 ]
rate( a, b) = (Y[b] - Y[a]) / (X[b] - X[a] )
"a<b && b不差于a" 即 " dp[ a ] + (A[ i ] - A[a+1])*(A[ i ] - A[a+1]) + C >= dp[ b ] + (A[ i ] - A[b+1])*(A[ i ] - A[b+1]) + C " 整理得 "rate(a,b) <= 2*A[ i ] "
故有:
① “a<b && b不差于a” 的等价条件是 : rate(a , b ) <= 2*A[ i ]
② 最优决策点myque[p]具有性质: rate(myque[p-1] , myque[p] ) <= 2*A[ i ] < rate(myque[p] , myque[p+1] )
利用①筛选队首元素 。 利用②筛选队尾元素 , 其原理是 若rate(a,b)>=rate(b,c) 则rate(a,b) <= 2*A[ i ] < rate(b,c) 恒不成立,即b不可能最优。
代码:
#include <cstdio>using namespace std;const int maxn=1000050;typedef long long LL;LL A[maxn] ,dp[maxn] , C;int myque[maxn] , head ,tail;int N ;#define Y(i) (dp[i]+A[i+1]*A[i+1])#define X(i) (A[i+1])bool head_check(int a,int b,int i){ return Y(b)-Y(a) <= 2*A[i]*(X(b)-X(a));}bool tail_check(int a,int b,int c){ return (Y(b)-Y(a))*(X(c)-X(b)) >= (Y(c)-Y(b))*(X(b)-X(a));}LL F(int j,int i){ return dp[j] + (A[i]-A[j+1])*(A[i]-A[j+1]) + C ;}int main(){ while(scanf("%d%I64d",&N,&C)!=EOF && N+C){ for(int i=1;i<=N;i++) scanf("%I64d",&A[i]); dp[0] = 0 ,myque[0] = 0 ,head = tail =0; for(int i=1;i<=N;i++){ while(head < tail && head_check(myque[head],myque[head+1],i)) head++; dp[i] = F(myque[head],i); while(head < tail && tail_check(myque[tail-1],myque[tail],i)) tail--; myque[++tail] = i; } printf("%I64d\n",dp[N]); } return 0;}
- HDU 4258 Covered Walkway【斜率优化dp】
- hdu 4258 Covered Walkway(斜率优化DP)
- HDU 4258 Covered Walkway(斜率优化DP)
- HDU 4258(Covered Walkway-斜率优化)
- HDU 4258 Covered Walkway【单调队列斜率优化】
- hdu 4258 Covered Walkway
- HDU 4258 Covered Walkway
- hdu 4258 Covered Walkway
- HDU 4258 Covered Walkway (DP +数形结合)#by Plato 终于A出来了~~~~~
- hdu4258Covered Walkway(斜率)
- hdu 4258(斜率优化DP)
- HDU 2829 Lawrence(四边形优化dp/斜率优化dp)
- 【斜率优化dp】HDU 2993
- hdu 3507 斜率优化dp
- HDU 3480 DP+斜率优化
- hdu 2993 斜率优化DP
- hdu 3507 斜率优化DP
- hdu 2829 斜率优化DP
- 使用node-inspector在线调试Node.js
- AVD简单介绍
- vs2005水晶报表的使用
- [week10]每周总结与工作计划(泛水)
- LeetCode 之 Pascal's Triangle
- HDU 4258 Covered Walkway(斜率优化DP)
- java静态内部类
- ActionBarSherlock注意事项
- 改变计划
- 我所想的
- Intent与PendingIntent的区别
- 【巴嘎日记】C++ 传入待修改的内容时候,需要传更深一层的指针
- DocumentHelper用法
- Access---Access没有使用对象的必要权限解决方案(ACCESS取消权限 ACCESS取消用户组权限)