下面是对矩阵消除游戏的题解,且这是属鼠第一次写题解,作一个开端。

using namespace std;
int a[20][20];
int lie[20];
int cnt ,n , m , k;//这里定义的全局变量也很关键
int calc(int st){
    int sum = 0;
    for (int i = 1 ; i <= n; i ++ ){
        if (((st>>(i-1))& 1)== 1) {
            cnt++;
            for (int j = 1;j <= m;j++)
                sum+=a[i][j];
        }
        else {
            for (int j = 1; j <= m; j ++ )
                lie[j] += a[i][j];
        }
    }//这个for循环其实很巧妙,主体功能是检索一个01串中的1来依次表示行号的选择情况,进而更具体地进行每一种选定情况下lie数组的维护
    return sum;
}
bool comp(int a,int b){
    return a > b;
}
int main(){
    scanf("%d%d%d",&n,&m,&k);
    int sum = 0 , ans = 0;
    for (int i = 1; i <= n ; i ++ ){
        for (int j = 1 ; j <= m; j ++ ){//第一处错误,这里把判断条件里的j写成了i,导致其余部分检查怀疑了n遍都无济于事
            scanf("%d",&a[i][j]);
            sum += a[i][j];
        }
    }
    if (k >= m || k >= n) {
        printf("%d",sum);
        return 0;
    }
    for (int st = 0; st < (1<<n); st ++ ){
        cnt = 0;//对计数变量的初始化
        memset(lie,0,80);//第二处错误,这里的sizeof输出的是字节数,而非简单的数量;
        另外,这里是每一次for循环前对lie数组的初始化,也挺关键的
        int sum2 = calc(st);
        int res = k - cnt ;
        if (res < 0 || res > k) continue;
        sort(lie+1, lie+1+m,comp);
        for (int i = 1; i <= res ; i ++)
            sum2 += lie[i];
        ans = max(ans,sum2);
    }
    printf("%d\n",ans);
    return 0;
}*

总之,此题耗费良久,本人熟记于心