51Nod 1022(四边形优化dp)
2017-09-26 22:56
281 查看
传送门
题解:由数据范围知复杂度大约为O(n^2),所以考虑四边形优化dp,尽快补上四边形优化的讲解。
题解:由数据范围知复杂度大约为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; }
相关文章推荐
- [DP 四边形不等式优化] 51Nod 1022 石子归并 V2
- [dp专题-四边形不等式优化]51nod 1022
- [dp专题-四边形不等式优化]51nod 1022
- 51nod 1022 石子归并 环形+四边形优化
- 51nod 1022 石子归并 环形+四边形优化
- 51nod 1022 石子归并 环形+四边形优化
- 51nod oj 1022 石子归并 V2 【环形区间DP----四边形不等式优化】
- [51nod 1022] 石子归并v2 [dp+四边形不等式优化]
- dp四边形优化 Hdu 2829 Lawrence 题解
- dp四边形优化
- 51nod 1053 最大M子段和 V2 (链表 对经典dp进行优化)
- ZOJ 2561 Order-Preserving Codes DP 四边形优化
- HDU 3480 Division DP + 四边形优化
- HDU - 3516 Tree Construction 四边形优化DP
- dp四边形优化 poj 1160 Post Office题解
- Nyoj 737: 石子合并(一)(区间DP+四边形优化)
- [51nod] 1002 数塔取数问题 [dp][空间优化]
- NYOJ 737 石子合并一(区间dp | 平行四边形优化)
- [转]四边形不等式优化dp(POJ1160)
- 51Nod 1022 石子归并 V2 (划分型dp四边形不等式优化)