时间限制: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相关推荐

  1. hiho 1615 矩阵游戏II [Offer收割]编程练习赛33 Problem A 贪心暴力

    把每列取反后所能获得的收益记录下来,然后排序,从高到低一对对的取,大于0就算上. #include <iostream> #include <stdio.h> #include ...

  2. hihocoder-1615-矩阵游戏II

    hihocoder-1615-矩阵游戏II #1615 : 矩阵游戏II 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxN的整数矩阵,小Hi每次操作可以选择 ...

  3. [ZJOI2007]棋盘制作 报表统计 矩阵游戏 时态同步

    好长时间了..简要除草. 棋盘制作:经典dp... 报表统计:明显数据结构,,,但我没想出来,第一问可以用堆,第二问用平衡树. 矩阵游戏:好吧.一眼二分图,匈牙利过. 时态同步:树形dp,貌似不难,( ...

  4. BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 123   Solved: 73 [ Submit][ St ...

  5. bzoj1059: [ZJOI2007]矩阵游戏

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4748  Solved: 2264 [Submit][St ...

  6. Acwing 1084. 数字游戏 II

    Acwing 1084. 数字游戏 II 题意: 指定一个整数闭区间 [a.b],问这个区间内有多少个取模数. 取模数:这种数字必须满足各位数字之和 mod N 为 0. 题解: 数位dp 这里不细讲 ...

  7. [ZJOI2007]矩阵游戏

    来源:牛客网: 题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的). 每次可以对该矩阵 ...

  8. NOIP模拟测试13「矩阵游戏·跳房子·优美序列」

    矩阵游戏 考试时思路一度和正解一样,考试到最后还是打了80分思路,结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值,每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点* ...

  9. 45. 跳跃游戏 II golang 动态规划

    45. 跳跃游戏 II 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [ ...

最新文章

  1. 算法:枚举法---kotlin
  2. Thread 与Runnable区别详解
  3. Android中的数据存储方式
  4. linux deepin换源:换成国内镜像源(上海交大镜像源)
  5. 解决Java compiler level does not match the version of the installed Java project facet.问题
  6. 程序员为啥365天都背电脑包?这答案我服!
  7. linux内核源码目录结构(2.6.35.7版本)
  8. OpenJudge NOI 1.16 08:石头剪刀布
  9. 【小记】-007--前端SEO优化
  10. SVN创建分支与合并
  11. JS小图切换大图轮播代码
  12. 将多个excel文件合并为:一个excel文件的多个sheet页【方法技巧】
  13. 计算机第一级开机密码设置,开机密码怎么设置
  14. iphone,ipad,android图片尺寸
  15. android跑马灯效果横向,Android 通过自定义View实现纵向跑马灯效果
  16. ArcGis-制图(简单点、线、面符号的制作、保存)
  17. Python数据库开发之-pymysql模块
  18. 如何用MFC画出直线、虚线、折线、圆、椭圆、矩形、弧形(附上源码)
  19. 栈和队列的相同点和不同点
  20. Google已开始从Chrome浏览器中取消对 FTP 的支持

热门文章

  1. 【飞鱼SEO】sem竞价的特点以及相关规则
  2. single crop和muti-crop
  3. Android动画渲染过程及原理(matrix),matrix动画,动画优化
  4. unity2D动画-角色切片与2DAnimation插件做动画
  5. unity学习之动画状态切换后角色沉入地面里面
  6. 【ACWing】4246. 最短路径和
  7. centos7.4运行hyperLedger fabric 1.3.0 first network
  8. android+自定义dns解析,安卓手机玩dnsmasq 搭建自己的DNS服务器
  9. 《好好说话》 学习笔记
  10. XSS笔记-来源于个人思路构造以及网络分享