蓝桥杯备考:贪心算法之矩阵消除游戏

这道题是牛客上的一道题,它呢和我们之前的排座位游戏非常之相似,但是,排座位问题选择行和列是不会改变元素的值的,这道题呢每每选一行都会把这行或者这列清零,所以我们的策略就是先用二进制把选择所有行的情况全部枚举出来,接着再选择列,找出和最大的情况即可

怎么用二进制列举情况,比如一共有3行,我们的选择是 000 001 010 011 100 110 111,也就是说到1000结束,也就是把1左移动3就行了

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 20;
int a[N][N];
int n, m, k;
int col[N];
int calc(int x)
{
    int cnt = 0;
    while (x)
    {
        x = x & (x-1);
        cnt++;
    }
    return cnt;
    
}
bool cmp1(int x1, int x2)
{
    return x1 > x2;
}
int main()
{
    cin >> n >> m >> k;

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> a[i][j];
        }
    }

    int ret = 0;
    for (int i = 0; i < (1<<n); i++)
    {
        int c = calc(i);
        if(c > k) continue;
        int sum = 0;
        int tmp = i;
        memset(col, 0, sizeof(col));
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                if ((tmp >> i) & 1) sum += a[i][j];
                else
                    col[j] += a[i][j];
            }
        }
        sort(col, col + m, cmp1);
        int tmp2 = calc(tmp);
        for (int i = 0; i < k-tmp2; i++)
        {
            sum += col[i];
        }
      ret = max(ret, sum);
    }
    cout << ret << endl;


    return 0;
}
相关推荐
xiezhr3 天前
米哈游36岁程序员被曝复工当晚猝死出租屋内
游戏·程序员·游戏开发
爱搞虚幻的阿恺6 天前
Niagara粒子系统-超炫酷的闪电特效(加餐 纸牌螺旋上升效果)
游戏·游戏引擎
智算菩萨6 天前
儿童游乐空间的双维建构:室内淘气堡与室外亲子乐园的发展学理、功能分野与协同育人机制研究
游戏·游戏策划
marteker6 天前
房地产市场平台Zillow与《魔兽世界》合作展示游戏内房屋
游戏
汉克老师7 天前
GESP2023年12月认证C++二级( 第三部分编程题(2) 小杨的H字矩阵)
c++·算法·矩阵·循环结构·gesp二级·gesp2级
wanhengidc7 天前
云手机 打造云端算力
运维·服务器·网络·游戏·智能手机
AI科技星7 天前
物理世界的几何建构:论统一场论的本体论革命与概念生成
人工智能·opencv·线性代数·算法·矩阵
没有bug.的程序员7 天前
订单系统重构史诗:从单体巨兽到微服务矩阵的演进、数据一致性内核与分布式事务
java·微服务·矩阵·重构·分布式事务·数据一致性·订单系统
super_lzb7 天前
【线性代数】矩阵第一讲:矩阵与矩阵的运算
线性代数·矩阵·考研数学·矩阵的计算
newbiai7 天前
TikTok矩阵账号引流怎么解决效率低成本高?
python·线性代数·矩阵