牛客:矩阵消除游戏

思路:由于规模在15左右,所以我们可以选择枚举(二进制枚举法(1<<n)-1).
先选行再选列,例如:如果k=5,表示我们可以选择行列一共5次,我们可以枚举0到5行的所有选择方案,假如我们选择了3行,那么我们就把在剩下的列里面选择两个最大的,每选完5次就和之前的做比较,最后取最大的一次即可。

代码核心思路

  1. 二进制枚举所有可能的选行方案 :用二进制数表示选中的行(例如 101 表示选中第 1 行和第 3 行)。

  2. 计算选行后的剩余可选列数 :若选了 num 行,则还能选 k - num 列(需保证非负)。

  3. 贪心选择最优列 :对未被选中的行,计算每列的元素和,选择最大的 k - num 列,累加其和。

  4. 记录最大值:遍历所有选行方案,保留总和最大的结果。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std; 
int n,m,k;
int num=0;
int arr[16][16]={0};
int lie[16]={0};
long long scale(int st){
    long long sum=0;
    for(int i=1;i<=n;i++){
        if(((st>>(i-1))&1)==1){
            for(int j=1;j<=m;j++){
                sum+=arr[i][j];
            }
            num++;
        }else{
            for(int j=1;j<=m;j++){
                lie[j]+=arr[i][j];
            }
        }
    }
    return sum;
}

int main(){
   
    cin>>n>>m>>k;
    int sum=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>arr[i][j];
            sum+=arr[i][j];
        }
    }
    if(k>=n||k>=m){
        cout<<sum;
        return 0;
    }
    long long ans=0;
    for(int i=0;i<=(1<<n)-1;i++){
        
        memset(lie,0,sizeof(lie));
        num=0;
        long long sum1=scale(i);
        
        if(num>k||num<0){
            continue;
        }else{
            sort(lie+1,lie+m+1);
            int x=k-num;
            for(int i=1,j=m;i<=x;i++,j--){
                sum1+=lie[j];
            }
            ans=max(ans,sum1);
        }
    }
    cout<<ans;    
    return 0;
}
相关推荐
Jgch226 小时前
出海Facebook广告账户怎么选?
游戏·facebook
长脖鹿Johnny10 小时前
游戏输入系统框架设计(三):网络输入权威与可验证性
网络·游戏·游戏开发·架构设计·输入系统·网络同步
谈资一本本11 小时前
电脑全能修复大师 Gilisoft Total Repair,智能检测修复系统、应用、游戏问题!DLL、DirectX、.NET运行库损坏修复+缺失自动补齐!
游戏·电脑·.net
程序员-Benothing19 小时前
H3 Max开放世界RPG:AI原生游戏,从“能生成“到“能玩“差了多远
游戏·ai-native
CoderYanger1 天前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
无别0521 天前
【做游戏】做完游戏Demo后没地方发布?
游戏·玩游戏
lilian2331 天前
HarmonyOS 7 新特性(二十九)|游戏伴随服务:悬浮协作与质量降级
游戏·语音识别·harmonyos
人民广场吃泡面1 天前
DLSS 5 深度解析:当 AI 学会“创造”画面,实时游戏渲染迎来“GPT 时刻”
人工智能·gpt·游戏
学习星球1 天前
AI 一句话生成 3D 游戏世界:腾讯 HY-World 2.0 开源深度解析与本地实战
开发语言·人工智能·游戏·3d·ai·课程设计·ai编程
乌萨达1 天前
梦幻新诛仙轻享电脑版怎么玩?模拟器安装与设置指南
游戏·安卓模拟器·雷电模拟器