2012年3月13日
摘要: HDU_3480 首先,一个贪心的思路就是如果将元素排个序,选择的一定是连续的区间,因为如果选了两个值,那么这个区间就可以选两个值之间的任何一个值,这样是不会改变这个区间的cost的。 如果用w[i][j]表示(a[j]-a[i])*(a[j]-a[i]),写出状态转移方程后会得到f[i][j]=min{f[i-1][k-1]+w[k,j]},这个和POJ_1160的状态转移方程是一样的,如果我们能够证明w为凸,那么这个题就可以用四边形不等式优化。 由于w[i+1][j]-w[i][j]=(a[i]-a[i+1])*(2*a[j]-a[i+1]-a[i]),这个表达式是随着j的增加单调递减.. 阅读全文
posted @ 2012-03-13 19:04 Staginner 阅读(711) 评论(0) 推荐(0) 编辑
摘要: HDU_3506 由于是环,所以可以先把序列copy一份,然后写出状态转移方程f[i][j]=min{f[i][k-1]+f[k][j]}+w[i][j],其中w为i到j的time和,这个和黑书上讲四边形不等式时候的状态转移方程是一样的,因而只要证明出w为凸即可。而因为w[i][j]+w[i+1][j+1]==w[i][j+1]+w[i+1][j],所以w为凸,这时就可以放心地用四边形不等式优化dp了。#include<stdio.h>#include<string.h>#define MAXD 2010#define INF 0x3f3f3f3fint N, f[MA 阅读全文
posted @ 2012-03-13 16:40 Staginner 阅读(311) 评论(0) 推荐(0) 编辑
摘要: HDU_2829 设w[i][j]表示i到j的value,那么可以得到f[i][j]=min{f[i-1][k-1]+w[k][j]}(i<k<=j),如果直接dp的话是O(M*N^2)的复杂度。 然而这个状态转移方程和POJ_1160的状态转移方程是一样的,因而只要我们能够证明w为凸的话,就可以证明f[i][j]为凸,那么就可以用四边形不等式进行优化了。 要证w为凸,只要证w[i][j]+w[i+1][j+1]<=w[i][j+1]+w[i+1][j]即可,也就是证明w[i+1][j]-w[i][j]是关于j单调递减的。又因为w[i][j]=w[i+1][j]+(A[j]- 阅读全文
posted @ 2012-03-13 16:04 Staginner 阅读(343) 评论(0) 推荐(0) 编辑