#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long ll;
const int MAXN = 11;
const int MAXM = 201;
ll money[MAXN][MAXM];
ll row[MAXN];
vector<ll> rowSum;
vector<ll> colSum;
vector<ll> high;
int getCount(int num){
int ret = 0;
while(num){
if(num & 1){
ret++;
}
num >>= 1;
}
return ret;
}
int main(){
ll n, m, x, k, sum = 0;
ios::sync_with_stdio(false);
cin >> n >> m >> x >> k;
rowSum.resize(n, 0);
colSum.resize(m, 0);
high.resize(m, 0);
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
cin >> money[i][j];
rowSum[i] += money[i][j];
colSum[j] += money[i][j];
sum += money[i][j];
}
}
ll rowMax = 1ll * x * m;
ll colMax = 1ll * x * n;
ll ans = sum;
for(int i = 0; i < (1 << n ); ++i){
ll ret = sum;
int index = 0;
int cnt = getCount(i);
if(k < cnt) continue;
for(int j = 0; j < n; ++j){
if(i & (1 << j)){
ret += rowMax - rowSum[j];
row[index++] = j;
}
}
for(int j = 0; j < m; ++j){
high[j] = colMax - colSum[j];
for(int l = 0; l < index; ++l){
high[j] += money[row[l]][j] - x;
}
}
sort(high.begin(), high.end(), greater<ll>());
for(int j = 0; j + cnt < k && high[j] > 0; ++j){
ret += high[j];
}
ans = max(ans, ret);
}
cout << ans;
return 0;
}
1625 夹克爷发红包
最新推荐文章于 2018-10-29 01:07:18 发布