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

news/2025/2/22 2:19:39

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

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

#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;
}


http://www.niftyadmin.cn/n/5861526.html

相关文章

性格测评小程序10生成报告

目录 1 修改数据源2 创建云函数2.1 安装依赖文件2.2 编写主方法 3 启用大模型4 搭建前端逻辑5 最终效果总结 这是我们测评小程序的最后一篇内容&#xff0c;当用户提交了测评&#xff0c;就需要依据测评的结果生成报告。如果按照传统开发思路&#xff0c;需要建表然后录入不同性…

LC-单词搜索、分割回文串、N皇后、搜索插入位置、搜索二维矩阵

单词搜索 使用 回溯法 来解决。回溯法适合用于这种路径搜索问题&#xff0c;我们需要在网格中寻找单词&#xff0c;并且每个字符都只能使用一次。 思路&#xff1a; 递归搜索&#xff1a;我们可以从网格中的每个单元格开始&#xff0c;进行深度优先搜索&#xff08;DFS&#x…

分布式 IO 模块:水力发电设备高效控制的关键

在能源领域不断追求高效与可持续发展的今天&#xff0c;水力发电作为一种清洁、可再生的能源形式&#xff0c;备受关注。而要实现水力发电设备的高效运行&#xff0c;精准的控制技术至关重要。分布式 IO 模块&#xff0c;正悄然成为水力发电设备高效控制的核心力量。 传统挑战 …

B+树作为数据库索引结构的优势对比

MySQL作为数据库&#xff0c;它的功能就是做数据存储和数据查找&#xff1b;使用B树作为索引结构是为了实现高效的查找、插入和删除操作。 B树的查找、插入、删除的复杂度都为 O(log n)&#xff0c;它是一个多叉树的结构&#xff0c;能兼顾各种操作的效率的数据结构。如果使用…

企业内部真题

文章目录 前端面试题:一个是铺平的数组改成树的结构问题一解析一问题一解析二前端面试题:for循环100个接口,每次只调3个方法一:使用 `async/await` 和 `Promise`代码解释(1):代码解释(2):1. `fetchApi` 函数2. `concurrentFetch` 函数3. 生成 100 个接口地址4. 每次并…

thread---基本使用和常见错误

多线程基础 一、C多线程基础 线程概念&#xff1a;线程是操作系统能够调度的最小执行单元&#xff0c;同一进程内的多个线程共享内存空间头文件&#xff1a;#include <thread>线程生命周期&#xff1a;创建->执行->销毁&#xff08;需显式管理&#xff09;注意事…

如何将MySQL数据库迁移至阿里云

将 MySQL 数据库迁移至阿里云可以通过几种不同的方法&#xff0c;具体选择哪种方式取决于你的数据库大小、数据复杂性以及对迁移速度的需求。阿里云提供了多种迁移工具和服务&#xff0c;本文将为你介绍几种常见的方法。 方法一&#xff1a;使用 阿里云数据库迁移服务 (DTS) 阿…

C语言基础系列【15】union 共用体

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…