NC200190 矩阵消除游戏
NC200190 矩阵消除游戏
题目
题目描述
牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是 \({n}\) 行 \({m}\) 列,第 \({i}\) 行第 \({j}\) 列的单元格的权值为 \(a_{i,j}\) ,牛妹可以进行 \({k}\) 个回合的游戏,在每个回合,牛妹可以选择一行或者选择一列,然后将这一行或者这一列的所有单元格中的权值变为 \({0}\) ,同时牛妹的分数会加上这一行或者这一列中的所有单元格的权值的和。
牛妹想最大化她的得分,球球你帮帮她吧!
输入描述
第一行三个整数 \({n,m,k}\)
接下来 \({n}\) 行每行 \({m}\) 个整数表示矩阵中各个单元格的权值。
输出描述
输出一个整数表示牛妹能获得的最大分数。
示例1
输入
3 3 2
101 1 102
1 202 1
100 8 100
输出
414
备注
\(1\leq n,m\leq 15\)
\(1\leq a_{i,j}\leq 1e6\) , \(1\leq k\leq n*m\)
题解
思路
知识点:枚举,贪心,位运算。
首先发现直接贪心是不可行的,每次清零会导致行列信息的都发生变化。考虑枚举行或列,这里选择枚举行的选择情况。
一共 \(2^n\) 种情况,用一个整型变量保存选择的状态即可。
在行选择完之后,对列贪心地从大开始选,注意选择的列数量只能是 \(min(k-cnt(i),m)\) ,\(cnt(i)\) 表示选择的行数量,由于剩余数量可能超过列数 \(m\) ,因此用 \(min\) 限制。
在累加过程可以用前缀和预处理,可以节省一点时间。
时间复杂度 \(O(2^nm \log m)\)
空间复杂度 \(O(nm)\)
代码
#include <bits/stdc++.h>
using namespace std;
int a[20][20], r[20], c[20], ccur[20];
int cnt(int n) {
int ans = 0;
while (n) {
ans++;
n &= n - 1;
}
return ans;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m, k;
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 < n;i++)
for (int j = 0;j < m;j++)
r[i] += a[i][j];
for (int i = 0;i < m;i++)
for (int j = 0;j < n;j++)
c[i] += a[j][i];
int ans = 0;
for (int i = 0;i < (1 << n);i++) {
if (cnt(i) > k) continue;
memcpy(ccur, c, sizeof(c));
int sum = 0;
for (int j = 0;j < n;j++) {
if ((i >> j) & 1) {
sum += r[j];
for (int u = 0;u < m;u++) ccur[u] -= a[j][u];
}
}
sort(ccur, ccur + m, [&](int a, int b) {return a > b;});
for (int j = 0;j < min(k - cnt(i), m);j++) sum += ccur[j];
ans = max(ans, sum);
}
cout << ans << '\n';
return 0;
}
NC200190 矩阵消除游戏的更多相关文章
- 【2014广州市选day1】JZOJ2020年9月12日提高B组T3 消除游戏
[2014广州市选day1]JZOJ2020年9月12日提高B组T3 消除游戏 题目 Description 相信大家玩过很多网络上的消除类型的游戏,一般来说就是在一个大拼图内找出相同的部分进行最大程 ...
- Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6
Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱: ...
- Java实现 LeetCode 390 消除游戏
390. 消除游戏 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数 ...
- egret之消除游戏开发
1.地图 (1)地图形状不同,尺寸不变 (2)背景图变化 2.步数 (1)不同关卡步数不同 (2)步数为01,游戏失败 3.道具 4.消除 (1)>=3可消除 (2)不可消除时,自动打乱 5.数 ...
- 消除游戏源码 Match 3 Jewel Full 298 Levels
Match 3 Jewel Full 298 Levels 一款unity3d编写的消消乐游戏, 关卡丰富,很好玩 下载地址:点击下载
- 【LeetCode】390. 消除游戏
题目 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直 ...
- [Swift]LeetCode390. 消除游戏 | Elimination Game
There is a list of sorted integers from 1 to n. Starting from left to right, remove the first number ...
- leetcode 390. 消除游戏
{20-01-29 19:22} class Solution { public int lastRemaining(int n) { return help(n); } public static ...
- 日入过百优质消除手游数据分享—萌萌哒包子脸爱消除(游戏开发引擎:libgdx)
从2014年开始,消除游戏异常火爆,从消除小星星到腾讯的天天消除都赢得了海量用户.目前,各大市场上开心消消乐等游戏依旧火爆.消除游戏一直持续保持着女性和孩子的主流游戏地位.虽然市场上消除游戏种类很多, ...
随机推荐
- 别像弱智一样提问 Stop-Ask-Questions-The-Stupid-Ways
https://github.com/xcr1234/Stop-Ask-Questions-The-Stupid-Ways 你真的准备好了吗? 感谢群友 for you 提供 避免 xy-proble ...
- Jquery_HTML-对HTML内容删除添加、操作CSS改变样式、遍历定位元素
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- Vue过渡和动画效果展示(案例、GIF动图演示、附源码)
前言 本篇随笔主要写了Vue过渡和动画基础.多个元素过渡和多个组件过渡,以及列表过渡的动画效果展示.详细案例分析.GIF动图演示.附源码地址获取. 作为自己对Vue过渡和动画效果知识的总结与笔记. 因 ...
- 论文解读(GMT)《Accurate Learning of Graph Representations with Graph Multiset Pooling》
论文信息 论文标题:Accurate Learning of Graph Representations with Graph Multiset Pooling论文作者:Jinheon Baek, M ...
- 4 个超实用的 Linux 监控工具
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 下面是 Linux 下 4 个日常使用率非常高的监控工具,可以帮助我们准确快速的诊断系统问题. 1. iotop 如果你想知 ...
- 利用expect批量修改Linux服务器密码
一个执着于技术的公众号 背景 修改Linux系统密码,执行passwd即可更改密码.可如果有成千上百台服务器呢,通过ssh的方式逐一进行修改,对我们来说,工作量是非常大,且效率非常低下.因此采用批量修 ...
- 如何用好Nginx的gzip指令
说一段废话 压缩响应数据有什么作用呢?问的好:从用户体验和IT成本两方面回答这个问题: 用户体验上 网速一定的情况下,传输10MB数据比传输5MB数据的时间快了一半.所以传输数据越小用户加载页面就越快 ...
- 【mq】从零开始实现 mq-13-注册鉴权 auth
前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...
- CentOS删除编译安装的Python3
编译安装Python3 # 下载 # wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz wget http://mirr ...
- e2fsck-磁盘分区修复
检查 ext2/ext3/ext4 类型文件系统. 语法 e2fsck [-panyrcdfvtDFV] [-b superblock] [-B blocksize] [-I inode_buffer ...