P1880 [NOI1995]石子合并

link

int sum[220][220];
int mi[220][220];
int ma[220][220];
int p[220];
int main(){
    int N;
    cin>>N;
    for(int i=1;i<=N;i++){
        scanf("%d", p+i);
        p[i+N]=p[i];
        sum[i][i]=p[i];
        sum[i+N][i+N]=p[i];
    }
    memset(mi,0x3f,sizeof(mi));
    for(int i=1;i<=2*N;i++){
        mi[i][i]=0;
    }
    for(int len=2;len<=N;len++){
        for(int i=1;len+i-1<2*N;i++){
            int j=len+i-1;
            for(int k=i;k<j;k++){
                sum[i][j]=sum[i][k]+sum[k+1][j];
                mi[i][j]=min(mi[i][j],mi[i][k]+mi[k+1][j]+sum[i][j]);
                ma[i][j]=max(ma[i][j], ma[i][k]+ma[k+1][j]+sum[i][j]);
            }
        }
    }
    int ans1=9999999;
    int ans2=0;
    for(int i=1;i<=N;i++){
        ans1=min(ans1,mi[i][i+N-1]);
        ans2=max(ans2,ma[i][i+N-1]);
    }
    printf("%d
", ans1);
    printf("%d
", ans2);
   return 0;
}
原文地址:https://www.cnblogs.com/FEIIEF/p/12547488.html