#include<bits/stdc++.h>
using namespace std;
using ll=long long;
struct S{ll s;vector<ll>p;};
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int n,m,k;cin>>n>>m>>k;
vector<S>ic;vector<ll>g;
for(int i=0;i<n;++i){
vector<ll>v(m);for(ll&x:v)cin>>x;
if(v[0]<=v[m-1]){
vector<ll>p(m+1,0);for(int j=0;j<m;++j)p[j+1]=p[j]+v[j];
ic.push_back({p[m],p});
}else for(ll x:v)g.push_back(x);
}
sort(g.begin(),g.end(),greater<ll>());
int gs=g.size();vector<ll>pg(gs+1,0);
for(int i=0;i<gs;++i)pg[i+1]=pg[i]+g[i];
sort(ic.begin(),ic.end(),[](auto&a,auto&b){return a.s>b.s;});
int ni=ic.size();vector<ll>pb(ni+1,0);
for(int i=0;i<ni;++i)pb[i+1]=pb[i]+ic[i].s;
ll ans=0;
for(int b=0;b<=ni;++b){
ll r=k-1LL*b*m;
if(r>=0&&r<=gs)ans=max(ans,pb[b]+pg[r]);
}
for(int x=1;x<m;++x){
ll K=k-x;if(K<0)continue;
vector<ll>M1(ni,-1e18),M2(ni,-1e18);
for(int b=0;b<ni;++b){
ll r=K-1LL*b*m;
if(r>=0&&r<=gs){M1[b]=pb[b]+pg[r];M2[b]=pb[b+1]+pg[r];}
}
vector<ll>pr(ni),sf(ni);ll c=-1e18;
for(int b=0;b<ni;++b){c=max(c,M1[b]);pr[b]=c;}
c=-1e18;for(int b=ni-1;b>=0;--b){c=max(c,M2[b]);sf[b]=c;}
for(int r=0;r<ni;++r){
ll bo=pr[r];if(r+1<ni)bo=max(bo,sf[r+1]-ic[r].s);
ans=max(ans,ic[r].p[x]+bo);
}
}
cout<<ans<<'\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 | #include<bits/stdc++.h> using namespace std; using ll=long long; struct S{ll s;vector<ll>p;}; int main(){ ios::sync_with_stdio(0);cin.tie(0); int n,m,k;cin>>n>>m>>k; vector<S>ic;vector<ll>g; for(int i=0;i<n;++i){ vector<ll>v(m);for(ll&x:v)cin>>x; if(v[0]<=v[m-1]){ vector<ll>p(m+1,0);for(int j=0;j<m;++j)p[j+1]=p[j]+v[j]; ic.push_back({p[m],p}); }else for(ll x:v)g.push_back(x); } sort(g.begin(),g.end(),greater<ll>()); int gs=g.size();vector<ll>pg(gs+1,0); for(int i=0;i<gs;++i)pg[i+1]=pg[i]+g[i]; sort(ic.begin(),ic.end(),[](auto&a,auto&b){return a.s>b.s;}); int ni=ic.size();vector<ll>pb(ni+1,0); for(int i=0;i<ni;++i)pb[i+1]=pb[i]+ic[i].s; ll ans=0; for(int b=0;b<=ni;++b){ ll r=k-1LL*b*m; if(r>=0&&r<=gs)ans=max(ans,pb[b]+pg[r]); } for(int x=1;x<m;++x){ ll K=k-x;if(K<0)continue; vector<ll>M1(ni,-1e18),M2(ni,-1e18); for(int b=0;b<ni;++b){ ll r=K-1LL*b*m; if(r>=0&&r<=gs){M1[b]=pb[b]+pg[r];M2[b]=pb[b+1]+pg[r];} } vector<ll>pr(ni),sf(ni);ll c=-1e18; for(int b=0;b<ni;++b){c=max(c,M1[b]);pr[b]=c;} c=-1e18;for(int b=ni-1;b>=0;--b){c=max(c,M2[b]);sf[b]=c;} for(int r=0;r<ni;++r){ ll bo=pr[r];if(r+1<ni)bo=max(bo,sf[r+1]-ic[r].s); ans=max(ans,ic[r].p[x]+bo); } } cout<<ans<<'\n'; } |
English