• COJN 0483 800501求最大非空子矩阵


    800501求最大非空子矩阵
    难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
    试题描述

    已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。
    比如,如下4 * 4的矩阵

    0 -2 -7 0
     9 2 -6 2
    -4 1 -4 1
    -1 8 0 -2

    的最大子矩阵是

    9 2
    -4 1
    -1 8

    这个子矩阵的大小是15。

    输入
    输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。
    输出
    输出最大子矩阵的大小。
    输入示例
    4
    0 -2 -7 0 9 2 -6 2
    -4 1 -4  1 -1
    8  0 -2
    输出示例
    15
    其他说明
    数据范围:题目描述中已经给出。
     

    题解:然而以前用悬线法做过?(逃

    写了个最大子线段

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #define PAU putchar(' ')
     8 #define ENT putchar('
    ')
     9 using namespace std;
    10 const int maxn=100+10;
    11 int n,a[maxn][maxn],dp[maxn];
    12 int get(int a[],int n){
    13     int mx=a[0],tmp=0;
    14     for (int i=0;i<n;i++){
    15         if(tmp>0)tmp+=a[i];else tmp=a[i];mx=max(mx,tmp);
    16     }return mx;
    17 }
    18 inline int read(){
    19     int x=0,sig=1;char ch=getchar();
    20     for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=0;
    21     for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';
    22     return sig?x:-x;
    23 }
    24 inline void write(int x){
    25     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    26     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
    27     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    28 }
    29 void init(){
    30     n=read();
    31     for(int i=0;i<n;i++)
    32         for(int j=0;j<n;j++)
    33             a[i][j]=read();
    34     int res=a[0][0];
    35     for(int i=0;i<n;i++){
    36         memset(dp,0,sizeof(dp));
    37         for(int j=i;j<n;j++){
    38             for(int k=0;k<n;k++)dp[k]+=a[j][k];
    39             res=max(res,get(dp,n));
    40         }
    41     }
    42     write(res);
    43     return;
    44 }
    45 void work(){
    46     return;
    47 }
    48 void print(){
    49     return;
    50 }
    51 int main(){init();work();print();return 0;}
  • 相关阅读:
    SQLite在iOS开发中的使用
    实现序列化和反序列化
    NSPredicate用于对集合类中的元素进行筛选
    通知中心NSNotification与委托的异同,需要注意的要点
    OC 重写description,isEqual方法
    iOs 单例模式的定义,实现、步骤
    Obejctiv-c 里面KVC 和 KVO的实现步骤,和有关方法
    关于NSTimer的几种构建方式
    NSTimer 实现到一个指定时间(年、月、日)的倒计时
    关于UILable、UIButton、UITextField简单运用
  • 原文地址:https://www.cnblogs.com/chxer/p/4675250.html
Copyright © 2020-2023  润新知