memset(w, 0x3f, sizeof (w)); memset(Dp, 0x3f, sizeof (Dp)); for (int i = 1; i <= N; ++i) { w[i][Sum[i][M]] = 0; for (int x = 1; x <= M; ++x) for (int y = x; y <= M; ++y) { int sum = Sum[i][M] - Sum[i][y] + Sum[i][x - 1]; w[i][sum] = min(w[i][sum], y - x + 1); } }
Dp[0][0] = 0; for (int i = 1; i <= N; ++i) { for (int j = 0; j <= K; ++j) for (int k = 0; k <= j; ++k) Dp[i][j] = min(Dp[i][j], Dp[i - 1][j - k] + w[i][k]); } int ans = inf; for (int i = 0; i <= K; ++i) ans = min(ans, Dp[N][i]); cout<<ans<<endl; return0; }