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\n", ans1); printf("%d\n", ans2); return 0; }
原文:https://www.cnblogs.com/FEIIEF/p/12547488.html