#include #define MAX 100 #define INFTY 999999 int N,K; int pages[MAX+1]; int P[2][MAX+1]; int S[MAX+2]; /* S[i] je soucet stran i..N */ static inline int max(int p, int q) { return (p>q) ? p : q; } int main(void) { int i,j,l,s,c; scanf("%d %d", &N, &K); for (i=1; i<=N; i++) { scanf("%d", pages+i); P[0][i] = INFTY; } for (i=N; i>0; i--) S[i] = S[i+1]+pages[i]; for (i=1; i<=K; i++) { l=i-1; for (j=i; j<=N; j++) { P[i&1][j] = max(S[l+1]-S[j+1], P[(i-1)&1][l]); while (lmax(S[l+2]-S[j+1], P[(i-1)&1][l+1]) ) { P[i&1][j] = max(S[l+2]-S[j+1], P[(i-1)&1][l+1]); l++; } } } i=j=1; while (i<=N) { s=c=0; while (i<=N && s+pages[i]<=P[K&1][N]) { s+=pages[i++]; c++; } printf("%d pisar: %d hercu\n", j++, c); } return 0; }