zoukankan      html  css  js  c++  java
  • hihocoder-1615-矩阵游戏II

    hihocoder-1615-矩阵游戏II

    #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

    贪心算法

      将最小两两的迭加,如果为负为取相反,如果为正则相加。

    #include <cstdio> 
    #include <cstring> 
    #include <cstdlib>  
    
    const int MAXN = 200 + 10; 
    
    int n, mp[MAXN][MAXN], a[MAXN]; 
    
    int cmp(const void *a, const void *b){
    	return (*(int *)a - *(int *)b); 
    } 
    
    int main(){
    	freopen("in.txt", "r", stdin);   
    
    	int ans; 
    	while(scanf("%d", &n) != EOF){
    		memset(a, 0, sizeof(a));  
    
    		for(int i=0; i<n; ++i){ 
    			for(int j=0; j<n; ++j){
    				scanf("%d", &mp[i][j]); 
    				a[j] += mp[i][j];  
    			}
    		}
    
    		ans = 0;  
    		qsort(a, n, sizeof(a[0]), cmp); 
    
    		int i = 0; 
    		while(i + 1 < n && a[i] < 0){
    			if( a[i+1] + a[i] < 0 ){
    				ans -= (a[i] + a[i+1]); 
    			}else{
    				ans += (a[i] + a[i+1]); 
    			}
    			i = i + 2; 
    		}
    		for( ; i<n; ++i){
    			ans += a[i]; 
    		} 
    
    		printf("%d
    ",  ans );
    	}
    	return 0; 
    }
    

      

  • 相关阅读:
    SQL优化索引
    如何减轻工作压力(一)
    奥巴马对美国影响最大的十句话
    10种职场潜规则
    Linux中的7件武器详解
    linux时间同步,ntpd、ntpdate
    Style中Position属性详解
    vsftp配置大全超完整版
    Linux 技巧:使用 screen 管理你的远程会话
    MySQL下mysql.sock丢失问题的解决
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/7756109.html
Copyright © 2011-2022 走看看