5 条题解
-
1
#include<bits/stdc++.h> using namespace std; int n,m; const int N=305; const int INF=0x3f3f3f3f; int dp[N][N]; int a[N]; int sum[N]; int minn=INF; int maxx; int dp1[N][N]; int main(){ cin>>n; memset(dp,INF,sizeof(dp)); for(int i=1;i<=n;i++){ cin>>a[i]; a[i+n]=a[i]; } for(int i=1;i<=2*n;i++){ dp[i][i]=0; sum[i]=sum[i-1]+a[i]; } //区间dp模板 for(int len=2;len<=n;len++){ for(int i=1;i<=2*n-len+1;i++){ int j=i+len-1; for(int k=i;k<=j-1;k++){ dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]); dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+sum[j]-sum[i-1]); } } } for(int i=1;i<=n;i++){ minn=min(minn,dp[i][i+n-1]); maxx=max(maxx,dp1[i][i+n-1]); } cout<<minn<<endl<<maxx; return 0; }
信息
- ID
- 1639
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 235
- 已通过
- 96
- 上传者