http://acm.pku.edu.cn/JudgeOnline/problem?id=1160
Код:
#include <iostream> using namespace std; int p[301][301]; int q[301][31]; int a[301]; int main() { int V, P; int i, j, k, l; int t[301]; int tmp; scanf( "%d%d" , & V, & P); for (i = 1 ; i <= V; i ++ ) scanf( "%d" , & a[i]); for (i = 1 ; i <= V; i ++ ) for (j = i; j <= V; j ++ ) { if (i == j) p[i][j] = 0 ; else { l = (i + j) / 2 ; p[i][j] = 0 ; for (k = i; k <= l; k ++ ) p[i][j] += a[l] - a[k]; for (k = l + 1 ; k <= j; k ++ ) p[i][j] += a[k] - a[l]; } } memset(q, 0 , sizeof (q)); for (i = 1 ; i <= V; i ++ ) for (j = 1 ; j <= P; j ++ ) { if (j == 1 ) q[i][j] = p[ 1 ][i]; else { if (i >= j) { q[i][j] = q[j - 1 ][j - 1 ] + p[j][i]; for (k = j; k < i; k ++ ) { if (q[i][j] > q[k][j - 1 ] + p[k + 1 ][i]) q[i][j] = q[k][j - 1 ] + p[k + 1 ][i]; } } } } cout << q[V][P] << endl; system("pause"); return 0 ; }