做完石子合并想这道题水做了,然后一发交上去3个RE:
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 305
int n, tmp;
int a[MAXN], sum[MAXN], dmin[MAXN][MAXN];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]), a[n + i] = a[i];
memset(dmin, 0x33, sizeof(dmin));
for (int i = 1; i < 2 * n; i++) dmin[i][i] = 0;
for (int i = 1; i < 2 * n; i++) sum[i] = sum[i - 1] + a[i];
for (int i = 1; i <= n; i++) for (int l = 1, r = l + i; r < n * 2; l++, r++) {
tmp = sum[r] - sum[l - 1];
for (int k = l; k < r; k++) {
dmin[l][r] = min(dmin[l][r], dmin[l][k] + dmin[k + 1][r] + tmp);
}
}
int ans = 1 << 30;
for (int i = 1; i <= n; i++) {
ans = min(ans, dmin[i][i + n - 1]);
}
printf("%d\n", ans);
return 0;
}