#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main()
{
int n, m, k;
cin >> n >> m >> k;
vector<vector<long long>> pref(n, vector<long long>(m + 1, 0));
for (int i = 0; i < n; i++)
{
for (int j = 1; j <= m; j++)
{
long long x;
cin >> x;
pref[i][j] = pref[i][j - 1] + x;
}
}
vector<long long> dp(k + 1, -1);
dp[0] = 0;
for (int i = 0; i < n; i++)
{
vector<long long> new_dp(k + 1, -1);
for (int used = 0; used <= k; used++)
{
if (dp[used] == -1)
continue;
for (int take = 0; take <= m && used + take <= k; take++)
{
new_dp[used + take] = max(new_dp[used + take], dp[used] + pref[i][take]);
}
}
dp = new_dp;
}
cout << dp[k];
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; int main() { int n, m, k; cin >> n >> m >> k; vector<vector<long long>> pref(n, vector<long long>(m + 1, 0)); for (int i = 0; i < n; i++) { for (int j = 1; j <= m; j++) { long long x; cin >> x; pref[i][j] = pref[i][j - 1] + x; } } vector<long long> dp(k + 1, -1); dp[0] = 0; for (int i = 0; i < n; i++) { vector<long long> new_dp(k + 1, -1); for (int used = 0; used <= k; used++) { if (dp[used] == -1) continue; for (int take = 0; take <= m && used + take <= k; take++) { new_dp[used + take] = max(new_dp[used + take], dp[used] + pref[i][take]); } } dp = new_dp; } cout << dp[k]; return 0; } |
English