2102 石子归并 2

来源:互联网 发布:mac sublime text 编辑:程序博客网 时间:2024/06/06 05:04

http://codevs.cn/problem/2102/

//2102 石子归并 2#include<cstdio>#include<cstring>#include<string>#define INF 0x3f3f3f3fusing namespace std;int n;int w[210];int c[210];int d[210][210];int p[210][210];int main(){    memset(d,0,sizeof(d));    memset(p,INF,sizeof(p));    c[0]=0;    scanf("%d",&n);    for(int i=1;i<=n;i++)scanf("%d",&w[i]);    for(int i=1;i<=n;i++)w[i+n]=w[i];    for(int i=1;i<=n*2;i++)c[i]=w[i]+c[i-1];    for(int i=1;i<=n*2;i++)p[i][i]=0;    //取最小初始化INF后,长度为一的区间要赋为0     for(int l=2;l<=n;l++){        for(int i=1;i+l-1<=n*2;i++){            int j=i+l-1;            for(int k=i;k<j;k++){                d[i][j]=max(d[i][j],d[i][k]+d[k+1][j]+c[j]-c[i-1]);                p[i][j]=min(p[i][j],p[i][k]+p[k+1][j]+c[j]-c[i-1]);            }        }    }    int ansm=0,ansn=INF;    for(int i=1;i<=n;i++){        ansm=max(ansm,d[i][i+n-1]);        ansn=min(ansn,p[i][i+n-1]);    }    printf("%d\n%d\n",ansn,ansm);    return 0;} 
0 0
原创粉丝点击