当前位置: 首页 > article >正文

算法题(149):矩阵消除游戏

审题:
本题需要我们找到消除矩阵行与列后可以获得的最大权值

思路:
方法一:贪心+二进制枚举

这里的矩阵消除时,行与列的消除会互相影响,所以如果我们先统计所有行和列的总和,然后选择消除最大的那一行/列,选择完后更新所有行和列的总和,再循环进行消除选择,此时会导致部分情况无法得到最优解。

eg:进行回合数限制为2,矩阵如下图

此时我们会先选择第一列,然后更新各行列的总和

此时我们就再选择第三行,选择结束

不过其实我们完全一开始可以直接就选择第一行和第三行,这样子两个回合就拿到了所有权值,所以这个策略是有问题的

正确贪心策略:先用二进制枚举行的选择情况,得到所有行的选取方案,然后失去了行的变动干扰,我们再对列求总和并取总和较大的前k-cnt列加入sum中即可,然后多组数据利用max维护一个最终答案answer

解题:
 

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 30;
int n,m,k;
int a[N][N];
int col[N];//计算每列总和
int answer;
int calcnt(int num)//计算有多少个1
{int count = 0;while(num){count++;num &= num-1;}return count;
}
bool cmp(int a, int b)
{return a > b;
}
int main()
{//数据录入cin >> n >> m >> k;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++)cin >> a[i][j];//二进制枚举所有行选择情况for(int i = 0; i < (1 << n); i++){ int cnt = calcnt(i);//非法回合数直接跳过if(cnt  > k) continue;//多组数据除去残留痕迹int sum = 0;memset(col,0,sizeof col);//完成对行和的累加和列和的统计for(int x = 0; x < n; x++){for(int y = 0; y < m; y++){if((i >> x) & 1)//当前行被选择{sum += a[x][y];}else{col[y] += a[x][y];  }}}sort(col,col+m,cmp);for(int j = 0; j <(k-cnt); j++){sum += col[j];}answer = max(answer,sum);}cout << answer << endl;return 0;
}

1.calcnt的作用是找到二进制枚举方案中对行进行了几次选取,也就是求出i的二进制表示中有多少个1

2.cmp是传递给sort的仿函数,用于将排序变为降序

矩阵消除游戏

http://www.lryc.cn/news/2379138.html

相关文章:

  • 在 Vue 中插入 B 站视频
  • printf函数参数与入栈顺序
  • 仿生眼机器人(人脸跟踪版)系列之一
  • 08、底层注解-@Configuration详解
  • Go语言语法---输入控制
  • 蓝桥杯单片机按键进阶
  • CSS- 4.3 绝对定位(position: absolute)学校官网导航栏实例
  • Flink 作业提交流程
  • 拓展运算符
  • Seata源码—6.Seata AT模式的数据源代理一
  • 计算机科技笔记: 容错计算机设计05 n模冗余系统 TMR 三模冗余系统
  • Spring Boot 与 RabbitMQ 的深度集成实践(一)
  • 黑马程序员2024新版C++笔记 第2章 语句
  • HTML5中的Microdata与历史记录管理详解
  • 上位机知识篇---涂鸦智能云平台
  • 面试中的线程题
  • 济南国网数字化培训班学习笔记-第三组-2-电力通信光缆网认知
  • 前端动画库 Anime.js 的V4 版本,兼容 Vue、React
  • 用 PyTorch 从零实现简易GPT(Transformer 模型)
  • 前端JSON序列化中的隐形杀手:精度丢失全解析与实战解决方案
  • 【通用大模型】Serper API 详解:搜索引擎数据获取的核心工具
  • Spring3+Vue3项目中的知识点——JWT
  • python3GUI--智慧交通分析平台:By:PyQt5+YOLOv8(详细介绍)
  • Linux任务管理与守护进程
  • C#里与嵌入式系统W5500网络通讯(2)
  • EMQX开源版安装指南:Linux/Windows全攻略
  • 【计算机视觉】OpenCV实战项目:GraspPicture 项目深度解析:基于图像分割的抓取点检测系统
  • MySQL 数据库备份与还原
  • Kubernetes控制平面组件:Kubelet详解(四):gRPC 与 CRI gRPC实现
  • javax.servlet.Filter 介绍-笔记