洛谷 1880 石子合并 DP
2017-10-20 16:44
309 查看
题目:
https://www.luogu.org/problem/show?pid=1880
好吧,这是石子归并的加强版,但貌似没啥区别……
思路:
拆环成链;
f[i][j] : 合并从i到j的最大(小)得分;
维护前缀和;
https://www.luogu.org/problem/show?pid=1880
好吧,这是石子归并的加强版,但貌似没啥区别……
思路:
拆环成链;
f[i][j] : 合并从i到j的最大(小)得分;
维护前缀和;
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN=501; int f1[MAXN][MAXN],f2[MAXN][MAXN],a[MAXN],sum[MAXN]; int n; void solve() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i+n]=a[i]; for(int i=1;i<=(n<<1);i++) sum[i]=sum[i-1]+a[i]; for(int j=1;j<(n<<1);j++)//枚举终点; for(int i=j-1;i>=1 && i>=j-n+1;i--)//枚举起点; { f2[i][j]=2147483647;//赋值,不要提前赋值!! for(int k=i;k<j;k++)//枚举断点; { f1[i][j]=max(f1[i][j],f1[i][k]+f1[k+1][j]+sum[j]-sum[i-1]); f2[i][j]=min(f2[i][j],f2[i][k]+f2[k+1][j]+sum[j]-sum[i-1]); } } int ans1=0,ans2=2147483647; for(int i=1;i<=n;i++) ans1=max(ans1,f1[i][i+n-1]),ans2=min(ans2,f2[i][i+n-1]); printf("%d\n%d",ans2,ans1); } int main() { solve(); return 0; }
相关文章推荐
- 动态规划——洛谷1880石子合并
- luogu1880 合并石子(区间dp)
- 洛谷1880 石子合并
- DP 洛谷 P1880 [NOI1995]石子合并
- 洛谷1880 石子合并
- (ssl 1597 洛谷 1880)石子合并
- 洛谷1880 石子合并
- 洛谷1880 石子合并
- 洛谷1880 石子合并
- 四边形不等式(dp优化)应用及证明(石子合并n^2)
- 区间DP-石子合并(线性)
- (区间dp)南阳理工 acm 737 石子合并(一)
- nyoj 737 石子合并(一)(区间DP)
- NYOJ 石子合并(一)经典区间DP
- 环形石子合并问题 - 经典DP问题
- 蓝桥杯 —— 石子合并问题 —— Dp
- 石子合并_DP
- 石子合并(区间dp)
- [动态规划] 洛谷P1063 能量项链 (石子合并)
- 区间DP-NYOJ737石子合并