思路和其他答主一模一样,我发这篇题解的目的就是提醒各位,要注意k的范围!!!!!!!!!!!!!!!!!

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int n,m,k;

bool cmp(int a,int b){
    return a > b;
}

long long int solve(vector<vector<int>> a,int key,vector<int> x,vector<int> y){
    int v = 0,cnt = 0; vector<int> log(n);
    for(int i = 1;i <= (1<<(a.size()-1)) ; i = ( i<< 1)){
        if((i & key) != 0) log[v] = 1,cnt++;
        v++;
    }
    if(cnt > k || cnt < 0) return -2;
    int col = k - cnt;
    if (col > m) col = m;
    long long int sum = 0;
    for(int i = 0; i< x.size() ;i++){
        for(int j = 0;j < log.size();j++) if(log[j] == 1) x[i] = x[i] - a[j][i];
    }
    sort(x.begin(),x.end(),cmp);
    for(int i = 0;i < y.size();i++) if(log[i] == 1) sum += y[i];
    for(int i = 0;i < col ;i++) sum += x[i];
    return sum;
}

int main(){
    cin>>n>>m>>k;
    vector<vector<int>> a(n,vector<int>(m)); vector<int> x(m); vector<int> y(n);
    long long int sum = 0;
    for(int i = 0;i < a.size();i++){
        for(int j = 0;j< a[i].size();j++) {
                cin>>a[i][j];
                sum = sum + a[i][j];
                y[i] = y[i] + a[i][j];//计算每一行的和
                x[j] = x[j] + a[i][j];//计算每一列的和
        }
    }
    long long int  maxx = -1;
    for(int i = 0; i <= (1 << a.size()) - 1;i++) maxx = max(maxx,solve(a,i,x,y));
    printf("%lld\n", maxx);
    return 0;
}