#include<bits/stdc++.h>
using namespace std;
// #include "debug_header.h"
#define int long long
#define ll long long
int mi;
int num;
int K;
int tot;
int C;
vector<vector<int>>v;
vector<vector<int>>x;
void dfs(int pos,int curr,int id){
if(curr<mi || num==C)return;
num++;
if(id+1<v[pos].size())dfs(pos,curr+v[pos][id+1]-v[pos][id],id+1);
for(int i=pos+1;i<v.size();i++){
int cu = curr+v[i][1]-v[i][0];
if(cu<mi || num==C)
break;
dfs(i,cu,1);
}
}
void get(){
num=0;
dfs(0,tot,0);
}
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
// freopen("roboherd.in", "r", stdin);
// freopen("roboherd.out", "w", stdout);
int N;
cin>>N;
cin>>K;
cin>>C;
for(int i=0;i<N;i++){
vector<int>p(K);
for(int &x:p){
cin>>x;
}
x.push_back(p);
}
for(int j=0;j<K;j++){
vector<int>te;
for(int i=0;i<N;i++){
te.push_back(x[i][j]);
}
sort(te.begin(),te.end(),greater<int>());
tot+=te[0];
v.push_back(te);
}
sort(v.begin(), v.end(), [](const vector<int>& a, const vector<int>& b){
return a[1] > b[1];
});
int lo=0;
int hi=1e13+11;
while(lo<hi){
mi=(lo+hi-1)/2;
get();
if(num<C) hi=mi;
else lo=mi+1;
}
cout<<(hi-1)<<"\n";
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |