#include <bits/stdc++.h>
using namespace std;
int k,n,i,j,b,u,f,e,m;
long long z,w,a;
vector<long long> h;
priority_queue<long long> p;
vector<vector<long long>> g;
vector<array<long long,2>> x;
vector<long long> mm;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> k;
f=0;
for(i=0;i<=m;i++) mm.push_back(0);
for(i=0;i<n;i++) {
h={};
//cout << i << '\n' << flush;
for(j=0;j<m;j++) {
cin >> a;
h.push_back(a);
}
if(h[m-1]<=h[0]) {
for(auto c:h)
p.push(c);
}
else {
z=0;
g.push_back({0});
for(auto c:h) {
z+=c;
g[f].push_back(z);
}
x.push_back({g[f][m],f});
f++;
}
}
//cout << "KKK\n" << flush;
z=0;
w=0;
sort(x.begin(),x.end());
i=x.size()-1;
while(i>=0 and k>=m) {
k-=m;
z+=x[i][0];
i--;
}
u=i;
//cout << "KLL\n" << flush;
for(;i>=0;i--) {
e=x[i][1];
for(j=0;j<=m;j++) mm[j]=max(mm[j],g[e][j]);
}
if(u<0)
while(k>0) {
a=p.top();
p.pop();
z+=a;
k--;
}
else {
z+=mm[k];
}
w=z;
//cout << "LLL\n" << flush;
while(u<(int)x.size()) {
for(j=k;j>0;j--) {
if(!p.empty()) {
z+=p.top();
p.pop();
z-=mm[j];
z+=mm[j-1];
w=max(w,z);
}
else break;
}
if(p.empty()) break;
k=m;
u++;
if(u<(int)x.size()) {
e=x[u][1];
for(j=0;j<=m;j++) mm[j]=max(mm[j],g[e][j]);
}
}
cout << w << '\n';
}
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #include <bits/stdc++.h> using namespace std; int k,n,i,j,b,u,f,e,m; long long z,w,a; vector<long long> h; priority_queue<long long> p; vector<vector<long long>> g; vector<array<long long,2>> x; vector<long long> mm; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> k; f=0; for(i=0;i<=m;i++) mm.push_back(0); for(i=0;i<n;i++) { h={}; //cout << i << '\n' << flush; for(j=0;j<m;j++) { cin >> a; h.push_back(a); } if(h[m-1]<=h[0]) { for(auto c:h) p.push(c); } else { z=0; g.push_back({0}); for(auto c:h) { z+=c; g[f].push_back(z); } x.push_back({g[f][m],f}); f++; } } //cout << "KKK\n" << flush; z=0; w=0; sort(x.begin(),x.end()); i=x.size()-1; while(i>=0 and k>=m) { k-=m; z+=x[i][0]; i--; } u=i; //cout << "KLL\n" << flush; for(;i>=0;i--) { e=x[i][1]; for(j=0;j<=m;j++) mm[j]=max(mm[j],g[e][j]); } if(u<0) while(k>0) { a=p.top(); p.pop(); z+=a; k--; } else { z+=mm[k]; } w=z; //cout << "LLL\n" << flush; while(u<(int)x.size()) { for(j=k;j>0;j--) { if(!p.empty()) { z+=p.top(); p.pop(); z-=mm[j]; z+=mm[j-1]; w=max(w,z); } else break; } if(p.empty()) break; k=m; u++; if(u<(int)x.size()) { e=x[u][1]; for(j=0;j<=m;j++) mm[j]=max(mm[j],g[e][j]); } } cout << w << '\n'; } |
English