4 solutions
-
1
#include<bits/stdc++.h> using namespace std; const int N=410; int w[N]; int s[N]; int f[N][N],g[N][N]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>w[i]; w[i+n]=w[i]; } for(int i=1;i<=2*n;i++) { s[i]=s[i-1]+w[i { int r=l+len- for(int l=1;l+len-1<=2*n;l++)1; for(int k=l;k<r;k++) {); } for(int len=2;len<=n;len++) { { int r=l+len-1; for(int k=l;k<r;k++) { g[l][r]=max(g[l][r],g[l][k]+g[k+1][r]+s[r]-s[l-1]); } } } int maxv=0;; for(int i=1;i<=n;i++)]; } memset(f,0x3f,sizeof f); memset(g,0xcf,sizeof g); for(int i=1;i<=2*n;i++) { f[l][r]=min(f[ } } int minv=2e9; for(int i=1;i+n-1<=2*n;i++)l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1] f[i][i]=0; g[i][i]=0; } for(int len=2;len<=n;len++) { { minv=min(minv,f[i][i+n-1]); } for(int l=1;l+len-1<=2*n;l++) { maxv=max(maxv,g[i][i+n-1]); } cout<<minv<<endl<<maxv<<endl; return 0; }
-
1
#include<bits/stdc++.h> using namespace std; const int N=410; int w[N]; int s[N]; int f[N][N],g[N][N]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>w[i]; w[i+n]=w[i]; } for(int i=1;i<=2*n;i++) { s[i]=s[i-1]+w[i]; } memset(f,0x3f,sizeof f); memset(g,0xcf,sizeof g); for(int i=1;i<=2*n;i++) { f[i][i]=0; g[i][i]=0; } for(int len=2;len<=n;len++) { for(int l=1;l+len-1<=2*n;l++) { int r=l+len-1; for(int k=l;k<r;k++) { f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1]); } } } int minv=2e9; for(int i=1;i+n-1<=2*n;i++) { minv=min(minv,f[i][i+n-1]); } for(int len=2;len<=n;len++) { for(int l=1;l+len-1<=2*n;l++) { int r=l+len-1; for(int k=l;k<r;k++) { g[l][r]=max(g[l][r],g[l][k]+g[k+1][r]+s[r]-s[l-1]); } } } int maxv=0;; for(int i=1;i<=n;i++) { maxv=max(maxv,g[i][i+n-1]); } cout<<minv<<endl<<maxv<<endl; return 0; }
-
0
#include<bits/stdc++.h> using namespace std; const int N=410; int w[N]; int s[N]; int f[N][N],g[N][N]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>w[i]; w[i+n]=w[i]; //扩展 } for(int i=1;i<=2*n;i++) { s[i]=s[i-1]+w[i]; //前缀和 } memset(f,0x3f,sizeof f); //初始化无穷大 memset(g,0xcf,sizeof g); //初始化无穷小 for(int i=1;i<=2*n;i++) //初始化自己 { f[i][i]=0; g[i][i]=0; } for(int len=2;len<=n;len++) //枚举区间长度 { for(int l=1;l+len-1<=2*n;l++) //区间左端点 { int r=l+len-1; //区间右端点 for(int k=l;k<r;k++) //枚举合并点 { f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1]); } } } int minv=2e9; //最小值 for(int i=1;i+n-1<=2*n;i++) { minv=min(minv,f[i][i+n-1]); //枚举长度为n的区间合并最小值 } for(int len=2;len<=n;len++) { for(int l=1;l+len-1<=2*n;l++) { int r=l+len-1; for(int k=l;k<r;k++) { g[l][r]=max(g[l][r],g[l][k]+g[k+1][r]+s[r]-s[l-1]); } } } int maxv=0;; for(int i=1;i<=n;i++) { maxv=max(maxv,g[i][i+n-1]); } cout<<minv<<endl<<maxv<<endl; return 0; }
- 1
Information
- ID
- 997
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 40
- Accepted
- 11
- Uploaded By