【每日一题】8月11日题目精讲—矩阵消除游戏

来源:牛客网:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,j,牛妹可以进行k个回合的游戏,在每个回合,牛妹可以选择一行或者选择一列,然后将这一行或者这一列的所有单元格中的权值变为0,同时牛妹的分数会加上这一行或者这一列中的所有单元格的权值的和。

牛妹想最大化她的得分,球球你帮帮她吧!

输入描述:
第一行三个整数n,m,k
接下来n行每行m个整数表示矩阵中各个单元格的权值。
输出描述:
输出一个整数表示牛妹能获得的最大分数。
示例1
输入
复制

3 3 2
101 1 102
1 202 1
100 8 100

输出
复制

414

备注:
在这里插入图片描述

题解:

我来总结下官方题解:
如果我们考虑一行一行或一列一列的选择则可以贪心。但实际上不行,所以我们要把问题转化成选若干列
再看看范围1<n,m<15,这不是等着我们去暴力吗?
如果我们给出每一列,那每一列的状态就是固定的
我们可以用01串来表示状态,比如01001表示134行不选,第25行选择,这样我们直接枚举0到2n-1就代表枚举了00…00到11…11
大致过程:
T从0~2n-1枚举,表示行的状态
T是一个十进制数,我们转发成二进制,看里面几个1(numh),哪些位置是1,进行记录。
T中几个1说明选几行,numl=k-numh(T中1的个数)为选几列
sum先加上要选的那几行(T中1的位置)
然后刨去那几行的数据,我们对剩下的数据按照每列的和进行排序,选择最高的那numl列
维护答案即可
整个过程实则为二进制转换+贪心

代码:

我对官方代码进行了更详细的解读

#include<bits/stdc++.h>
using namespace std;
int n, m ,k;
int a[20][20];
long long sh[20],sl[20];//sh[i]是第i行的和,sl[i]是第i列的和(在行选完之后用)
bool b[20];//b[i]是01串转换过来的bool数组(用bool数组主要是为了方便大家理解)
long long ans = 0; //存答案,注意总和会超过int的最大值要用long long
int deal(int x)  //把x这个数字转换成bool数组
{memset(b, 0, sizeof(b)); //不清数组会死!int cnt = 0, i = 1; //cnt存01串里面1的个数while (x){if (x&1)  //如果x的最后一位是1{cnt++;//记录其中1的数量 b[i] =1;//说明第i行是被选择的 }x>>=1;  //x右移一位,等价于除以二取整i++;//到下一行 }return cnt;
}
int main()
{
//————————————读入——————————————scanf("%d%d%d", &n, &m, &k);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){scanf("%d", &a[i][j]);sh[i] += a[i][j];//记录每一行的值 }
//————————以上读入不多说————————//——如果k>n或者k>M,那么肯定就把矩阵选完了————
//这里我这么处理主要是因为我后面的有个判断把这种情况给直接continue掉了,
//debug的时候不想的再写别的了就这样了
//k=n或者m就已经能把矩阵选完,所以结果肯定是一样的if (k > n) k = n;if (k > m) k = m;
//————————————————————————————————————————//—————枚举选行的所有可能性,贪心处理列——————int tmp = (1<<n) -1;  //1<<n就等于2^n,位运算不会的同学百度一下for (int T =0; T <= tmp; T++)  //T用来枚举行的状态{int numh = deal(T);//将状态T转为bool数组,并返回有多少个1,既要选多少行int numl = k-numh; //numl是要选多少列if (numl > m || numl < 0) continue;//numl>m或者numl<0,说明行的方案不对(其实也有可能是k太大,这里就是上文说的k比较大的时候直接continue没了的地方)。long long  sum=0;  //sum是本次枚举的方案的和for (int i = 1; i <= n; i++) if (b[i]) sum += sh[i]; //把选中的行都加上memset(sl, 0, sizeof(sl));//行选得不同矩阵就不同,所以sl数组每次都要清干净for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)if (!b[i]) sl[j] += a[i][j]; //第i行没有选,j列的和需要加上a[i][j](第i行选了a[i][j]就清零了不能加)sort(sl+1, sl+1+m);//对每一列的和进行排序(刨去指定行) for (int i=1,j=m; i<=numl; i++,j--) sum += sl[j]; //把最大的numl列的和加到方案里ans = max(ans, sum);//维护答案}
//————————————枚举+贪心结束——————————————printf("%lld\n", ans);return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core集成CAP(分布式事务总线)

一、前言感谢杨晓东大佬为社区贡献的CAP开源项目&#xff0c;传送门在此&#xff1a;.NET Core 事件总线,分布式事务解决方案&#xff1a;CAP 以及 如何在你的项目中集成 CAP【手把手视频教程】&#xff0c;之前也在工作中遇到分布式数据一致性的问题&#xff0c;也一直都是基于…

.Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

在学习的过程中&#xff0c;看一些一线的技术文档很吃力&#xff0c;而且考虑到国内那些技术牛人英语都不差的&#xff0c;要向他们看齐&#xff0c;所以每天下班都在疯狂地背单词&#xff0c;博客有些日子没有更新了&#xff0c;见谅见谅 什么是TPL?Task Parallel Library (T…

.NET Core Agent

熟悉java的朋友肯定知道java agent&#xff0c;当我看到java agent时我很是羡慕&#xff0c;我当时就想.net是否也有类似的功能&#xff0c;于是就搜索各种资料&#xff0c;结果让人很失望。当时根据 https://github.com/OpenSkywalking/skywalking-netcore 找到这个 https://d…

【每日一题】8月14日题目精讲 [SCOI2010]游戏

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 lxhgww最近迷上了一款游戏&#xff0c;在游戏里&#xff0c;他拥有很多的装备&#x…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题&#xff0c;并给出了一个案例应用程序&#xff1a;tasklist。今天接着上文的内容&#xff0c;继续了解一下如何使用Azure DevOps进行ASP.NET Core应用程序的持续集成。为了便于讨论&#xff0c;本文会将持续集…

【每日一题】8月17日题目精讲-[SCOI2009]生日礼物

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小西有一条很长的彩带&#xff0c;彩带上挂着各式各样的彩珠。已知彩珠有N个&#xff…

Followme Devops step by step

接着上次分享的devops历程[Followme Devops实践之路], 大家希望能够出一个step by step手册, 那今天我就来和手把手来一起搭建这么一套环境, 演示整个过程!实验环境需要准备docker /docker compose建议大家使用国外的vps学习, 不需要考虑网络/gwf的问题/方便(本demo搭建在linod…

【每日一题】8月25日题目精讲 XOR-pyramid

文章目录题目描述&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/problem/112798 来源&#xff1a;牛客网 输入描述: 输出描述: Print q lines — the answers for the queries. 示例1 输入 复制 3 8 4 1…

申请Office 365一年免费的开发者账号攻略(2018年10月份版本)

要进行Office 365开发&#xff0c;当然需要有完整的Office 365环境才可以。为了便于广大开发人员快速地启动这项工作&#xff0c;微软官方给所有开发人员提供了免费的一年开发者账号那么如何申请Office 365一年免费的开发者账号呢&#xff1f;网上已经有一些攻略了&#xff0c;…

开源若要天下闻,掌声须给教育人

引子故事一当我们介绍 Linux Kernel 项目历史的时候&#xff0c;我们会如此说&#xff1a;“1991 年&#xff0c;赫尔辛基大学的大学生 Linus torvald, 在自己的电脑上开发了一个能够运行在 X86 架构上的操作系统&#xff0c;并将它发布在互联网上&#xff0c;任何人都可以参与…

【每日一题】8月27日题目精讲 Is It A Tree?

链接&#xff1a;https://ac.nowcoder.com/acm/problem/105905 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 10000K&#xff0c;其他语言20000K 64bit IO Format: %lld 题目描述 A tree is a well-known data struct…

好代码是管出来的——使用Jenkins搭建CI服务器

Jenkins是一个开源的跨平台的CI工具&#xff0c;它可以部署在Windows、Linux等平台上&#xff0c;并且Jenkins提供了非常丰富的插件来帮助完成编译、测试、部署等工作。  本文将介绍在Windows平台上使用Jenkins完成.Net Core应用的持续集成环境搭建&#xff0c;其主要内容有&…

牛客练习赛 59

A.小乔和小灰灰 前几天刚刚学了序列自动机&#xff0c;这题直接也没咋想暴力的做法&#xff0c;直接上序列自动机匹配子序列即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm&…

.Net Core 2.1 通用主机(Core 在控制台应用程序中的应用)

一、介绍官方文档中说&#xff0c;Microsoft.AspNetCore.App 元包&#xff08;ASP.NET Core 2.1 或更高版本&#xff09;包含通用主机的Microsoft.Extensions.Hosting包&#xff0c;当创建控制台项目以后并没有相应的包。在官方案例中所用的Nuget包有&#xff1a;1. Microsoft.…

产品开发管理之流程和体系(总篇)

前言秋风瑟瑟&#xff0c;夏日的灼热犹在&#xff0c;就瞬间迎来刺骨寒风。凛冬将至&#xff0c;今天对我们来说&#xff0c;像贴面的利刃一样冰冷而真实。农民、建筑工人、司机、程序员、私企高管、私企老板、资本巨富&#xff0c;都被裹挟进了这个焦灼的时代&#xff0c;没有…

YbtOJ#593-木棍问题【费用流】

正题 题目链接:https://www.ybtoj.com.cn/contest/114/problem/3 题目大意 n∗mn*mn∗m的网格上有一些格子有木球&#xff0c;两个相邻木球直接可以有木棍。 两个LLL形的木棍会产生AAA的代价&#xff0c;两个III形的木棍会产生BBB的代价 对于每个kkk求出插入kkk根木棍时的最小…

1143 Lowest Common Ancestor 甲级

题意&#xff1a; 给出一棵二叉搜索树的前序遍历&#xff0c;问结点u和v的共同最低祖先是谁&#xff0c;利用先序遍历特点。 二叉搜索树满足&#xff1a; 节点的左子树只包含键小于节点键的节点。 节点的键只包含节点的右键大于或等于子树的节点的键。 左子树和右子树也必须是…

《.NET Core 2.0 应用程序高级调试》7折优惠

活动截止到2018年10月15日晚24:00&#xff0c;之后恢复8.6折价格。都说.NET Core 在Linux 上跑得快&#xff0c;可是如果.NET Core 程序在Linux 操作系统上出现了内存泄漏、死锁或者崩溃情况怎么办&#xff1f;怎样在Linux 和macOS操作系统上有效地使用工具对.NET Core 应用程序…

确认过眼神,你是ApacheWay的人 | COSCon‘18 特辑

*大会官网&#xff1a;http://coscon.kaiyuanshe.cn/*报名链接&#xff1a;点击文末“阅读原文”如果您对 Apache 感兴趣那么中国开源年会COSCon18将是您不可错过的一站写在大会前为什么本土开源项目对 Apache 青睐相加我们用实际数据说话Apache 顶级项目Apache CarbonData Car…

牛客练习赛 57——manacher算法 树形dp?

A - Tic-Tac-Toe 直接考虑每个人8种赢的情况即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N5; char g[N][N]; int main() {//IO;int …