求助
查看原帖
求助
973480
封禁用户楼主2024/9/26 06:32
#include <bits/stdc++.h>
using namespace std;
int n,a[301],dp_max[301][301],dp_min[301][301],s[301];
int main(){
  cin >> n;
  for(int i=1; i<=n; i++){
    cin >> a[i];
    a[i+n]=a[i];
  }
  for(int i=1;i<=n*2;i++) s[i]=s[i-1]+a[i];
  for(int i=1; i<=n; i++){
    for(int j=1; j<=n; j++){
      if(i==j) dp_max[i][j]=0,dp_min[i][j]=0;
      else dp_min[i][j]=2147483647,dp_max[i][j]=0;
    }
  }
  int l=1,r=n;
  while(r<=n*2){
    int i1=l,j1=l+1,i2=l,j2=l+1;
    while(j2<=r){
      while(i1<=r&&j1<=r){
        int j=j1,i=i1;
        int sum=s[j]-s[i-1];
        int l=j-1;
        for(int k=i; k<=l; k++){
          dp_min[i][j]=min(dp_min[i][j],sum+dp_min[i][k]+dp_min[k+1][j]);
          dp_max[i][j]=max(dp_max[i][j],sum+dp_max[i][k]+dp_max[k+1][j]);
        }
        i1++,j1++;
        i1=i2;
        j2++;
        j1=j2;
      }
    }
    l++;
    r++;
  }
  cout << dp_min[1][n*2] << endl << dp_max[1][n*2];
  return 0;
}

2024/9/26 06:32
加载中...