本文主要是介绍1197:山区建小学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通过代码:
#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:山区建小学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!