5 条题解
-
0
#include<iostream> using namespace std; const int MAXN = 210; const int INF = 114514; int n,a[MAXN],b[MAXN]; int dp1[MAXN][MAXN]; int dp[MAXN][MAXN]; int maxx = -INF; int minn = INF; int pre[MAXN]; int main() { cin >> n; for (int i = 0;i < n;i++) { cin >> a[i]; } for (int i = 0;i < 2 * n;i++) { b[i] = a[i % n]; } for (int i = 0;i < 2 * n;i++) { pre[i + 1] = pre[i] + b[i]; } for (int i = 0;i < 2 * n;i++) { for (int j = 0;j < 2 * n;j++) { dp[i][j] = INF; dp1[i][j] = -INF; } dp[i][i] = 0; dp1[i][i] = 0; } for (int len = 2;len <= n;len++) { for (int i = 0;i + len - 1 < 2 * n;i++) { int j = i + len - 1; int ij = pre[j + 1] - pre[i]; for (int k = i;k < j;k++) { if (dp[i][k] != INF && dp[k + 1][j] != INF) { dp[i][j] = min(dp[i][j],dp[i][k] + dp[k + 1][j] + ij); } if (dp1[i][k] != -INF && dp1[k + 1][j] != -INF) { dp1[i][j] = max(dp1[i][j],dp1[i][k] + dp1[k + 1][j] + ij); } } } } for (int i = 0;i < n;i++) { minn = min(minn,dp[i][i + n - 1]); maxx = max(maxx,dp1[i][i + n - 1]); } cout << minn << endl; cout << maxx << endl; return 0; }
信息
- ID
- 1639
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 235
- 已通过
- 96
- 上传者