【hihoCoder】#1615 : 矩阵游戏II
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定一个NxN的整数矩阵,小Hi每次操作可以选择两列,将这两列中的所有数变成它的相反数。
小Hi可以进行任意次操作,他的目标是使矩阵中所有数的和尽量大。你能求出最大可能的和吗?
输入
第一行一个整数N。
以下N行,每行N个整数Aij。
对于30%的数据,2 ≤ N ≤ 10
对于100%的数据,2 ≤ N ≤ 200, -1000 ≤ Aij ≤ 1000
输出
最大可能的和
样例输入
4 -1 1 1 2 -2 -3 1 2 -3 -2 1 2 -4 -1 1 2
样例输出
27
/
分析:对于一组数,他们的相反数之和是他们和的相反数。所以对于N*N矩阵,把某一列设置为相反数后求总和,实际上可以改为把某一列的和设置为相反数后求总和。
这里要求一次把某两列设置为相反数,可以先将矩阵所有列的和保存在一个vector之中,然后对vector排序。此时可以确定排序后的容器,前两个元素必然是矩阵中列之和最小的两个列。如果这两个元素相加之和小于0,那么可以确定把这两列设置为相反数后其和大于0,即可以增加矩阵的总和。将这两列设置为相反数之和,重新排序容器,继续上一步的判断,直到最小的两个元素之和大于0,意味着此时如果设置某两列为相反数,只会减小就矩阵的总和,则停止循环,获取此时容器中所有元素的和,既是矩阵可能的最大的和。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int getcolsum(int **p, int N, int col) //获取矩阵列的和
{int sum = 0;for(int i = 0; i != N; ++i){sum += p[i][col];}return sum;
}
int main()
{int N;cin >> N;//开辟二维数组 int **arr = new int*[N];for(int i = 0; i != N; ++i){arr[i] = new int[N];for(int j = 0; j != N; ++j) //输入元素 cin >> arr[i][j];}vector<int> colsum; //获取矩阵每一列的和 for(int i = 0; i != N; ++i)colsum.push_back(getcolsum(arr, N, i));sort(colsum.begin(), colsum.end()); //对每一列和进行排序 while(colsum[0] + colsum[1] < 0) //当排序后最小的两列和相加小于0,此时把这两列设置为相反数可以 { //增大矩阵和,把此两列设置为相反数,即把列之和设置为相反数 colsum[0] = -colsum[0];colsum[1] = -colsum[1]; sort(colsum.begin(), colsum.end()); //从新排序继续循环 }//获取矩阵和 int sum = 0;for(int i = 0; i != colsum.size(); ++i)sum += colsum[i];cout << sum << endl;//释放二维数组 for(int i = 0; i != N; ++i)delete []arr[i];delete []arr;return 0;
}
【hihoCoder】#1615 : 矩阵游戏II相关推荐
- hiho 1615 矩阵游戏II [Offer收割]编程练习赛33 Problem A 贪心暴力
把每列取反后所能获得的收益记录下来,然后排序,从高到低一对对的取,大于0就算上. #include <iostream> #include <stdio.h> #include ...
- hihocoder-1615-矩阵游戏II
hihocoder-1615-矩阵游戏II #1615 : 矩阵游戏II 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxN的整数矩阵,小Hi每次操作可以选择 ...
- [ZJOI2007]棋盘制作 报表统计 矩阵游戏 时态同步
好长时间了..简要除草. 棋盘制作:经典dp... 报表统计:明显数据结构,,,但我没想出来,第一问可以用堆,第二问用平衡树. 矩阵游戏:好吧.一眼二分图,匈牙利过. 时态同步:树形dp,貌似不难,( ...
- BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 123 Solved: 73 [ Submit][ St ...
- bzoj1059: [ZJOI2007]矩阵游戏
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4748 Solved: 2264 [Submit][St ...
- Acwing 1084. 数字游戏 II
Acwing 1084. 数字游戏 II 题意: 指定一个整数闭区间 [a.b],问这个区间内有多少个取模数. 取模数:这种数字必须满足各位数字之和 mod N 为 0. 题解: 数位dp 这里不细讲 ...
- [ZJOI2007]矩阵游戏
来源:牛客网: 题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的). 每次可以对该矩阵 ...
- NOIP模拟测试13「矩阵游戏·跳房子·优美序列」
矩阵游戏 考试时思路一度和正解一样,考试到最后还是打了80分思路,结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值,每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点* ...
- 45. 跳跃游戏 II golang 动态规划
45. 跳跃游戏 II 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [ ...
最新文章
- 算法:枚举法---kotlin
- Thread 与Runnable区别详解
- Android中的数据存储方式
- linux deepin换源:换成国内镜像源(上海交大镜像源)
- 解决Java compiler level does not match the version of the installed Java project facet.问题
- 程序员为啥365天都背电脑包?这答案我服!
- linux内核源码目录结构(2.6.35.7版本)
- OpenJudge NOI 1.16 08:石头剪刀布
- 【小记】-007--前端SEO优化
- SVN创建分支与合并
- JS小图切换大图轮播代码
- 将多个excel文件合并为:一个excel文件的多个sheet页【方法技巧】
- 计算机第一级开机密码设置,开机密码怎么设置
- iphone,ipad,android图片尺寸
- android跑马灯效果横向,Android 通过自定义View实现纵向跑马灯效果
- ArcGis-制图(简单点、线、面符号的制作、保存)
- Python数据库开发之-pymysql模块
- 如何用MFC画出直线、虚线、折线、圆、椭圆、矩形、弧形(附上源码)
- 栈和队列的相同点和不同点
- Google已开始从Chrome浏览器中取消对 FTP 的支持
热门文章
- 【飞鱼SEO】sem竞价的特点以及相关规则
- single crop和muti-crop
- Android动画渲染过程及原理(matrix),matrix动画,动画优化
- unity2D动画-角色切片与2DAnimation插件做动画
- unity学习之动画状态切换后角色沉入地面里面
- 【ACWing】4246. 最短路径和
- centos7.4运行hyperLedger fabric 1.3.0 first network
- android+自定义dns解析,安卓手机玩dnsmasq 搭建自己的DNS服务器
- 《好好说话》 学习笔记
- XSS笔记-来源于个人思路构造以及网络分享