#include #include int max(int x, int y){return x > y ? x : y;} int min(int x, int y){return x < y ? x : y;} int main(int argc, char* argv[]){ const int size = 0xf; const int MIN = -0xfff; int a[size], dp[size][size], m, k; memset(a, MIN, size); memset(dp, MIN, size); scanf("%d%d", &m, &k); int i, j, x; for(i = 1; i <= m; i++){ int s; scanf("%d", &s); a[i] = a[i - 1] + s; } for(i = 1; i <= m; i++){ for(j = i; j <= k; j++){ dp[i][j] = MIN; for(x = i; x <= j; x++){ dp[i][j] = min(dp[i][j], a[i] - a[x + 1]); } } } for(i = 1; i <= k; i++) printf("%d %d\n", dp[k][i]); scanf("%d%d"); return 0; } // f[i][j] = min{max(f[k][j-1], sum(k+1, i)), j