通过代码:
#include <bits/stdc++.h> using namespace std; int n, m, a[501][501], c[501][501], f[501][501]; int main() { scanf("%d%d", &n, &m); for(int i = 1; i < n; i ++) scanf("%d", &a[i][i + 1]); for(int i = 1; i <= n; i ++) for(int j = i + 1; j <= n; j ++) a[i][j] = a[j][i] = a[i][j - 1] + a[j - 1][j]; for(int i = 1; i <= n; i ++) for(int j = i + 1; j <= n; j ++) { int mid = (i + j) / 2; for(int k = i; k <= j; k ++) c[i][j] += a[mid][k]; } for(int i = 1; i <= n; i ++) f[i][1] = c[1][i]; for(int i = 1; i <= n; i ++) for(int j = 2; j <= m; j ++) { f[i][j] = 100000; for(int k = j - 1; k <= i; k ++) f[i][j] = min(f[i][j], f[k][j - 1] + c[k + 1][i]); } printf("%d", f[n][m]); return 0; }
1197:山区建小学
最新推荐文章于 2024-07-09 22:46:48 发布