石子合并
2011-12-15 20:46
99 查看
/article/1821166.html
n堆石子排成一条直线
找不到题目,就copy了别人的代码,自己写的无法验证对错
View Code
n堆石子排成一条直线
找不到题目,就copy了别人的代码,自己写的无法验证对错
View Code
#include<stdio.h> #include<string.h> const int INF = 1000000000; #define M 110 int dp1[M][M],dp2[M][M]; int sum[M][M]; int num[M]; int min(int a,int b) { return a<b?a:b; } int max(int a,int b) { return a>b?a:b; } int main() { int n,i,j,k; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&num[i]); for(i=1;i<=n;i++) sum[i][1]=num[i]; for(j=2;j<=n;j++) for(i=1;i<=n;i++) sum[i][j]=sum[i%n+1][j-1]+num[i]; for(i=0;i<=n;i++) dp1[i][1]=dp2[i][1]=0; for(j=2;j<=n;j++) { for(i=1;i<=n;i++) { dp1[i][j]=0; dp2[i][j]=INF; for(k=1;k<j;k++) { dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[(i+k-1)%n+1][j-k]+sum[i][j]); dp2[i][j]=min(dp2[i][j],dp2[i][k]+dp2[(i+k-1)%n+1][j-k]+sum[i][j]); } } } int ansmi=INF,ansmx=0; for(i=1;i<=n;i++) { ansmx=max(ansmx,dp1[i] ); ansmi=min(ansmi,dp2[i] ); } printf("%d\n%d\n",ansmi,ansmx); } return 0; }
相关文章推荐
- 动态规划:圆形石子合并问题
- 算法设计与分析习题3-3 石子合并问题直线排列最大得分
- 石子合并2
- 石子合并问题汇总
- nyoj737石子合并(一)【区间dp】
- 小白算法练习 dp练习001-区间dp NYOJ 石子合并,整数划分 POJ Brackets
- 石子合并(GarsiaWachs算法)
- 【无聊放个模板系列】HDU 3506 (四边形不等式优化DP-经典石子合并问题[环形])
- NYoj737 石子合并(区间dp)
- Nyoj 737: 石子合并(一)(区间DP+四边形优化)
- 环形dp——石子合并[NOI1995]
- 洛谷 1880 石子合并 DP
- 洛谷 p1880 石子合并 区间dp
- 【p1880】石子合并
- 石子合并问题
- 南阳理工OJ_题目737 石子合并(一)
- 石子-石子合并
- 动态规划之石子合并(2)
- (转)石子合并问题
- 石子合并