#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 夹克爷发红包
猜你喜欢
转载自blog.csdn.net/m0_37691414/article/details/80445336
今日推荐
周排行