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 矩阵消除游戏的更多相关文章

  1. 【2014广州市选day1】JZOJ2020年9月12日提高B组T3 消除游戏

    [2014广州市选day1]JZOJ2020年9月12日提高B组T3 消除游戏 题目 Description 相信大家玩过很多网络上的消除类型的游戏,一般来说就是在一个大拼图内找出相同的部分进行最大程 ...

  2. Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6

    Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱: ...

  3. Java实现 LeetCode 390 消除游戏

    390. 消除游戏 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数 ...

  4. egret之消除游戏开发

    1.地图 (1)地图形状不同,尺寸不变 (2)背景图变化 2.步数 (1)不同关卡步数不同 (2)步数为01,游戏失败 3.道具 4.消除 (1)>=3可消除 (2)不可消除时,自动打乱 5.数 ...

  5. 消除游戏源码 Match 3 Jewel Full 298 Levels

    Match 3 Jewel Full 298 Levels 一款unity3d编写的消消乐游戏, 关卡丰富,很好玩 下载地址:点击下载

  6. 【LeetCode】390. 消除游戏

    题目 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直 ...

  7. [Swift]LeetCode390. 消除游戏 | Elimination Game

    There is a list of sorted integers from 1 to n. Starting from left to right, remove the first number ...

  8. leetcode 390. 消除游戏

    {20-01-29 19:22} class Solution { public int lastRemaining(int n) { return help(n); } public static ...

  9. 日入过百优质消除手游数据分享—萌萌哒包子脸爱消除(游戏开发引擎:libgdx)

    从2014年开始,消除游戏异常火爆,从消除小星星到腾讯的天天消除都赢得了海量用户.目前,各大市场上开心消消乐等游戏依旧火爆.消除游戏一直持续保持着女性和孩子的主流游戏地位.虽然市场上消除游戏种类很多, ...

随机推荐

  1. for in 语法遍历对象

    1. 语法格式 for (变量 in 对象) { console.log(变量) }   2. 代码实例 // 遍历对象 var obj = { name: 'pink老师', age: 18, se ...

  2. JS加载不出来 必须alert才可以 alert另一种功能

    BEGIN; 今天在引入百度编辑器时,发现百度编辑器加载不出来. 代码是这样的: var editor = new baidu.editor.ui.Editor({    textarea: 'con ...

  3. C3P0反序列化链学习

    C3P0 c3p0第一次听闻是用于fastjson的回显上,大佬们总结三种方法,后面两种主要就是用于fastjson和jackjson的回显利用(注入内存马) http base jndi hex序列 ...

  4. 攻防世界-MISC:give_you_flag

    这是攻防世界新手练习区的第四题,题目如下: 点击附件一下载,打开后发现是一个gif动图 可以看到动图有一瞬间出现了一个二维码,找一个网站给他分离一下 得到一张不完整的二维码(然后就不知道该怎么办了,菜 ...

  5. 【ACM程序设计】差分

    差分 假设有一个数列,我们需要对数列中的一个区间加上或减去一个值,直接想到的便是对该区间进行一次循环逐项加减. 但是当请求的操作变得非常多的时候,每次请求都进行一次循环会很容易爆时间,因此我们引入了差 ...

  6. 通过代码解释什么是API,什么是SDK?

    这个问题说来惭愧,读书时找实习面的第一家公司,问的第一个问题就是这个. 当时我没能说清楚,回去之后就上百度查.结果查了很久还是看不懂,然后就把这个问题搁置了. 谁知道毕业正式工作后,又再一次地面对了这 ...

  7. 用户与安全 -(1)Linux用户及组管理

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登 ...

  8. 不懂 Zookeeper?来看看这篇文章

    开源Linux 长按二维码加关注~ 高并发分布式开发技术体系已然非常的庞大,从国内互联网企业使用情况,可发现RPC.Dubbo.ZK是最基础的技能要求.关于Zookeeper你是不是还停留在Dubbo ...

  9. IIS发布Https和Https的问题

    asp.net调试页面的时候遇到一个问题,我喜欢右键点击在浏览器查看页面,打开的页面默认是https的,其实iis会同时生成http和https两种页面,但是我懒得每次去点.问题是页面中测试接口是ht ...

  10. jQuery前端第三方框架

    计时器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...