zoukankan      html  css  js  c++  java
  • NYOJ 104 最大和

    最大和

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:5
     
    描述

    给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。 
    例子:
    0 -2 -7 0 
    9 2 -6 2 
    -4 1 -4 1 
    -1 8 0 -2 
    其最大子矩阵为:

    9 2 
    -4 1 
    -1 8 
    其元素总和为15。 

     
    输入
    第一行输入一个整数n(0<n<=100),表示有n组测试数据;
    每组测试数据:
    第一行有两个的整数r,c(0<r,c<=100),r、c分别代表矩阵的行和列;
    随后有r行,每行有c个整数;
    输出
    输出矩阵的最大子矩阵的元素之和。
    样例输入
    1
    4 4
    0 -2 -7 0 
    9 2 -6 2 
    -4 1 -4 1 
    -1 8 0 -2 
    
    样例输出
    15
    来源
    [苗栋栋]原创
    上传者
    苗栋栋
    解题:很难又很简单的一道题。难在于化二维平面为一维区间这种巧妙的处理方法,容易在于求最大子段和。实质就是暴力+dp

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <climits>
     5 using namespace std;
     6 int main() {
     7     int table[110][110],i,j,ks,n,m,k,temp,ans;
     8     scanf("%d",&ks);
     9     while(ks--) {
    10         scanf("%d %d",&n,&m);
    11         memset(table,0,sizeof(table));
    12         for(i = 1; i <= n; i++)
    13             for(j = 0; j < m; j++) {
    14                 scanf("%d",table[i]+j);
    15                 table[i][j] += table[i-1][j];
    16             }
    17         ans = INT_MIN;
    18         for(i = 0; i < n; i++) {
    19             for(j = i+1; j <= n; j++) {
    20                 for(temp = k  = 0; k < m; k++) {
    21                     if(temp >= 0) temp += table[j][k]-table[i][k];
    22                     else temp = table[j][k]-table[i][k];
    23                     if(temp > ans) ans = temp;
    24                 }
    25             }
    26         }
    27         printf("%d
    ",ans);
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    常见的块级元素和行级元素
    CentOS 利用 yum 安装卸载软件常用命令
    MySQL 派生表(Derived Table) Merge Optimization
    MySQL中的两种临时表
    集中化管理平台 — Ansible 详解
    MySQL 错误码对照
    mysqldump 工具使用详解——参数选项
    git 命令参考手册
    XtraBackup 备份与恢复实例讲解
    XtraBackup 原理与安装
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3844728.html
Copyright © 2011-2022 走看看