脑洞大开-矩阵消除游戏

矩阵消除游戏

https://ac.nowcoder.com/acm/problem/200190

#枚举 #位运算 #贪心

题意

  • n行m列矩阵(1<=n,m<=15),k次操作,每次消除一行or一列,将答案加上消除的值
  • 求解最大答案

思路

  • 对于只消除行和列,一定是消除行和和列和最高的k个
  • 行和列同时选的时候,贪心的依次选最高行和列不能保证答案最优
选两次
9 10 1
1 1 1
1 20 9
  • 所以既然混着选没法确定,那就枚举行的所有选法,然后再行确定的时候堆列进行贪心,用一个n位2进制表示行的选法,然后每次剔除所选行的元素计算每列的和

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;

int a[20][20];
int sum1[20],sum2[20];

int deal(int x){
    int cnt=0;
    while(x){
        if(x&1) cnt++;
        x>>=1;
    }
    return cnt;
}

signed main(){
    int n,m,k;
    cin >> n >> m >> k;
    if(k>n||k>m) k=n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin >> a[i][j];
            sum1[i]+=a[i][j];
        }
    }
    int res=0;
    for(int st=0;st<=(1<<n)-1;st++){
        int cnt=deal(st);
        int ans=0;
        if(cnt>k) continue;
        for(int i=1;i<=n;i++){
            if((st>>i-1)&1){
                ans+=sum1[i];
            }
        }
        // cout << st << ' ' << cnt << ' '<< ans << endl;
        memset(sum2,0,sizeof(sum2));
        for(int i=1;i<=n;i++){
            if((st>>i-1)&1) continue;
            for(int j=1;j<=m;j++){
                sum2[j]+=a[i][j];    
            }
        }
        sort(sum2+1,sum2+m+1,greater());
        
        for(int i=1;i<=k-cnt;i++){
            ans+=sum2[i];
        }
        res=max(res,ans);
    }
    cout << res << endl;
    return 0;
}
全部评论

相关推荐

09-16 14:43
已编辑
华南农业大学 游戏后端
背景&nbsp;双一流本硕&nbsp;双非大圆满&nbsp;只找游戏开发相关的岗位。&nbsp;8&nbsp;月初开始秋招到现在&nbsp;投了四五十家吧,&nbsp;目前两&nbsp;offer,&nbsp;不打算继续投了,把剩下的流程走完就开始沉淀了。目前两&nbsp;offer&nbsp;一个是网易互娱测开&nbsp;base&nbsp;广州,一个是江娱互动客户端开发&nbsp;base&nbsp;北京。应该确定网易这个了,说实话北京这个我挺想去的,这家的产品和工作氛围我了解了也不错,是那种踏实做事的,可惜我是广东人。网易的测开是调剂的二志愿,看了下有内部转岗机会,所以打算后面找个时间提前实习,沉淀下再做一个&nbsp;demo&nbsp;作品,写一些&nbsp;shader,增强下图形学渲染的能力,再学点编辑器开发。看到时候内部转岗或者春招继续投客户端开发这样。后面还能再动摇的话应该就灵犀或者腾子了吧(假如这两家确认的是客户端开发岗的话)。-----------------------补下timeline网易互娱&nbsp;测开&nbsp;8.2笔试&nbsp;&nbsp;8.21&nbsp;技术面&nbsp;&nbsp;8.29&nbsp;leader&amp;HRBP面(终面)&nbsp;9.8&nbsp;录用审核(之前一直显示面试中)9.14&nbsp;oc江娱互动&nbsp;客户端开发&nbsp;8.29主程面&nbsp;9.3&nbsp;制作人面&nbsp;9.5&nbsp;BOSS面&nbsp;9.11&nbsp;口头OC&nbsp;9.15&nbsp;正式offer后面考虑了一下&nbsp;&nbsp;感觉还是能走开发就开发吧,测开不太感兴趣,要内部活水转岗还要满1年才能申请。。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务