1 条题解
-
0
#include <bits/stdc++.h> #define int long long using namespace std; const int MAXN = 500; const int MAXAI = 100000; const int INF = MAXAI * MAXN * (MAXN - 1) / 2; int n; int a[MAXN + 5]; int sum[MAXN + 5]; int f[MAXN + 5][MAXN + 5]; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i]; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) f[i][j] = INF; for (int len = 1; len <= n; len++) for (int l = 1; l + len - 1 <= n; l++) { int r = l + len - 1; for (int i = l; i <= r; i++) { // l~i-1 先表演,然后 i 进栈压底,然后 i+1~r 表演,最后 i 表演 int now = 0; if (i != l) // 左边没人的时候不用管左边的人 { now += f[l][i - 1]; // 左边表演的时间 now += ((i - 1) - l + 1) * (sum[r] - sum[i - 1]); // 左边表演时 i~r 在等待 } if (i != r) // 右边没人时不用管右边的人 { now += f[i + 1][r]; // 右边表演的时间 now += (r - (i + 1) + 1) * a[i]; // 右边表演时 i 在等待 } f[l][r] = min(f[l][r], now); } } cout << f[1][n]; return 0; }
- 1
信息
- ID
- 13402
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 53
- 已通过
- 11
- 上传者