#include <algorithm>
#include <cstdint>
#include <cstdio>
#include <vector>
using Buffer = std::vector<uint64_t>;
using Sum = std::vector<uint64_t>;
void update(const Sum& sum, Buffer& buffer) {
const int m = sum.size();
const int k = buffer.size();
Buffer newBuffer(k);
for (int j = 0; j < k; j++) {
for (int i = 0; i < std::min(k - j, m); i++) {
newBuffer[i + j] = std::max(newBuffer[i + j], sum[i] + buffer[j]);
}
}
std::swap(buffer, newBuffer);
}
int main() {
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
Buffer buffer(k + 1);
for (int i = 0; i < n; ++i) {
Sum sum(m + 1);
uint64_t s;
for (int j = 0; j < m; ++j) {
scanf("%lu", &s);
sum[j + 1] = sum[j] + s;
}
update(sum, buffer);
}
printf("%lu\n", buffer.back());
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 | #include <algorithm> #include <cstdint> #include <cstdio> #include <vector> using Buffer = std::vector<uint64_t>; using Sum = std::vector<uint64_t>; void update(const Sum& sum, Buffer& buffer) { const int m = sum.size(); const int k = buffer.size(); Buffer newBuffer(k); for (int j = 0; j < k; j++) { for (int i = 0; i < std::min(k - j, m); i++) { newBuffer[i + j] = std::max(newBuffer[i + j], sum[i] + buffer[j]); } } std::swap(buffer, newBuffer); } int main() { int n, m, k; scanf("%d %d %d", &n, &m, &k); Buffer buffer(k + 1); for (int i = 0; i < n; ++i) { Sum sum(m + 1); uint64_t s; for (int j = 0; j < m; ++j) { scanf("%lu", &s); sum[j + 1] = sum[j] + s; } update(sum, buffer); } printf("%lu\n", buffer.back()); return 0; } |
English