51Nod 1022(四边形优化dp)
来源:互联网 发布:腾讯游戏平台mac版本 编辑:程序博客网 时间:2024/05/19 07:10
传送门
题解:由数据范围知复杂度大约为O(n^2),所以考虑四边形优化dp,尽快补上四边形优化的讲解。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=2004,INF=0x3f3f3f3f;int n,a[MAXN],dp[MAXN][MAXN],s[MAXN][MAXN],sum[MAXN][MAXN];int main() { while (~scanf("%d",&n)) { memset(sum,0,sizeof(sum)); for (int i=1;i<=n;++i) scanf("%d",&a[i]),a[n+i]=a[i]; for (int i=1;i<=(n<<1);++i) dp[i][i]=0,s[i][i]=i; for (int i=1;i<=(n<<1);++i) for (int j=i;j<=min(i+n,n<<1);++j) sum[i][j]=sum[i][j-1]+a[j]; for (int len=2;len<=n;++len) for (int i=1;i+len-1<=(n<<1);++i) { int j=i+len-1; dp[i][j]=INF; for (int k=s[i][j-1];k<=s[i+1][j];++k) { if (dp[i][j]>dp[i][k]+dp[k+1][j]+sum[i][j]) dp[i][j]=dp[i][k]+dp[k+1][j]+sum[i][j],s[i][j]=k; } } int ans=INF; for (int i=1;i<=n;++i) ans=min(ans,dp[i][i+n-1]); printf("%d\n",ans); } return 0;}
阅读全文
0 0
- 51Nod 1022(四边形优化dp)
- [dp专题-四边形不等式优化]51nod 1022
- [DP 四边形不等式优化] 51Nod 1022 石子归并 V2
- 51 NOD 1022 石子归并 V2(dp四边形加速)
- 51Nod 1022 石子归并 V2 (划分型dp四边形不等式优化)
- 51nod oj 1022 石子归并 V2 【环形区间DP----四边形不等式优化】
- 【51Nod】1021 - 石子归并(区间dp & 四边形不等式优化)
- 51nod 1022 石子归并 环形+四边形优化
- 51nod 1022 石子归并 环形+四边形优化
- POJ 1160 (区间DP+四边形优化)
- 石子合并(DP+ 四边形不等式优化)
- hdu 3516(四边形优化dp)
- poj 1160(四边形优化dp)
- hdu 四边形优化dp
- hdu2829 四边形优化dp
- 四边形优化dp
- dp四边形优化
- 四边形不等式优化DP
- Spring Aop(一)——Aop简介
- HDU 1215 七夕节
- HTML知识整理
- Sobel算子及C++实现
- 一个安卓工程师学习后台的经历《一》ide选择篇
- 51Nod 1022(四边形优化dp)
- HDOJ2018
- 16进制转10进制使用霍纳算法(java版)
- MySQL中的UNIX_TIMESTAMP函数使用总结
- 函数进阶
- Open Credit System UVA
- 为什么这样写要???是不是跟程序的执行顺序有关?
- 重新实现.NET Core的 double.ToString()
- Linux的安装过程