程序博客网 > 宜昌自学考试网络报名
来源:互联网 发布:宜昌自学考试网络报名 编辑:程序博客网 时间:2024/04/29 16:30
区间类动态规划,理解规划方程后注意方程的求解。做到范围不错,依赖关系不错。
/*task:石子合并author:mike wangemail:creativewang@163.comdate:2011-05-14 23:28submit site:rqnoj.com OR sznoi.cn/ojps:此题进行比较顺利,因为刚昨晚能量项链*/#include<stdio.h>#define SIZE 120#define INFINITY (1<<20)long max(long m,long n){ return m>n?m:n;}long min(long m,long n){ return m>n?n:m;}int main(void){long n,s[SIZE*2],opt[SIZE*2][SIZE*2],ans1,ans2,sum[SIZE*2];scanf("%ld",&n);long i,j,k;for(i=1;i<=n;i++)scanf("%ld",&j),s[i]=s[i+n]=j;for(i=1,sum[0]=0;i<=2*n;i++)sum[i]=sum[i-1]+s[i]; for(i=0;i<SIZE*2;i++)for(j=0;j<SIZE*2;j++)opt[i][j]=0;for(i=2;i<=n;i++)for(j=1;j+i-1<=2*n;j++)for(k=j;k<i+j-1;k++)opt[j][j+i-1]=max(opt[j][j+i-1],opt[j][k]+opt[k+1][i+j-1]+sum[i+j-1]-sum[j-1]);for(i=1,ans2=0;i<=n;i++)ans2=max(ans2,opt[i][i+n-1]);for(i=0;i<SIZE*2;i++)for(j=0;j<SIZE*2;j++)opt[i][j]=INFINITY;for(i=0;i<SIZE*2;i++)opt[i][i]=0;for(i=2;i<=n;i++)for(j=1;j+i-1<=2*n;j++)for(k=j;k<i+j-1;k++)opt[j][j+i-1]=min(opt[j][j+i-1],opt[j][k]+opt[k+1][i+j-1]+sum[i+j-1]-sum[j-1]);for(i=1,ans1=INFINITY;i<=n;i++)ans1=min(ans1,opt[i][i+n-1]);printf("%ld/n%ld/n",ans1,ans2);return 0;}