ccf 201612-4 压缩编码 石子合并问题(DP+平行四边形优化)

来源:互联网 发布:神通数据库的英文 编辑:程序博客网 时间:2024/05/14 21:14

学无止境~

平行四边形优化为啥成立还在思考中~

//石子问题 平行四边形优化 #include<iostream>#define maxn 1002#define inf 0x3fffffff#define min(a,b) a<b?a:busing namespace std;int n;int a[maxn],dp[maxn][maxn],p[maxn][maxn],sum[maxn];int main(){scanf("%d",&n);sum[0] = 0;for(int i = 1;i<=n;i++){scanf("%d",&a[i]);dp[i][i] = 0;p[i][i] = i;sum[i] =  sum[i-1]+a[i];}for(int c = 1;c<n;c++){for(int i = 1;i<=n-c;i++){int val = inf,j = i+c,kk;int total = sum[j]-sum[i-1];for(int k = p[i][i+c-1];k<=p[i+1][i+c]&&k<j;k++){if(dp[i][k]+dp[k+1][j]+total<val){val = dp[i][k]+dp[k+1][j]+total;kk = k;}}dp[i][j] = val;p[i][j] = kk;//cout<<i<<"  "<<j<<"  "<<kk<<"  "<<dp[i][j]<<endl;}}printf("%d\n",dp[1][n]);return 0;}


原创粉丝点击