POJ 1050
程序员文章站
2022-05-01 09:39:59
...
POJ ACM第1050题的详细描述,请参照
http://acm.pku.edu.cn/JudgeOnline/problem?id=1050
题目意思:
给定包含有正负整型的二维数组,找出所有子矩阵的和的最大值。
如二维数组
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
中和最大的子矩阵是
9 2
-4 1
-1 8
且最大和是15.
输入:
第一行是二维数组维数,其余多行是二维数组的元素,且数组由空格和空行分割。
输出:
子矩阵最大和。
实现原理:穷举行,然后转换为一维数组进行求解,代码如下:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1050
题目意思:
给定包含有正负整型的二维数组,找出所有子矩阵的和的最大值。
如二维数组
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
中和最大的子矩阵是
9 2
-4 1
-1 8
且最大和是15.
输入:
第一行是二维数组维数,其余多行是二维数组的元素,且数组由空格和空行分割。
输出:
子矩阵最大和。
实现原理:穷举行,然后转换为一维数组进行求解,代码如下:
#include<stdio.h> //calculate the max sum of sub array of one-dimensional array int max(int *b,int n) { int sum=0,max=0,i=1; while(i<=n) { if(sum<0) sum=b[i]; else sum+=b[i]; if(max<sum) max=sum; i++; } return max; } //main method int main() { int a[][];//输入二维数组 int num[101];//转换为一维之后 int t[101][101];//[b]t[i][j]代表第j列前i行元素之和[/b] int Max=0,i,j,n,p,q,tempmax,rowcount,m; //输入二维数组,参见另一篇文章 //calculate the sum of rows before i for(i=0;i<=n;i++) { for(j=1;j<=n;j++) { if(i==0) t[i][j]=0; else { int temp=0; for(m=1;m<=i;m++) temp+=a[m][j]; t[i][j]=temp; } } } //穷举行,然后转换为一维数组求解 rowcount=1;//每次选取rowcount行 while(rowcount<=n) { for(p=1;p<=n-rowcount+1;p++) { //[b]从第m行到第n行的和等于t[n][j]-t[m-1][j][/b] for(q=1;q<=n;q++) num[q]=t[p+rowcount-1][q]-t[p-1][q]; tempmax=max(num,n); if(Max<tempmax) Max=tempmax; } rowcount++; } printf("%d\n",Max); }
上一篇: 二维数组转换成JSON
推荐阅读
-
惠普1050怎么扫描? 惠普1050一体机扫描文件的方法
-
POJ3252Round Numbers(数位dp)
-
技嘉GTX 1050Ti G1性能深度评测+拆解图
-
宏碁Win10廉价笔记本价格曝光 8月上市仅需1050元
-
AMD RX470/RX470D和NVIDIA GTX1050Ti显卡性能对比评测图解
-
跟RX470D一拼?影驰超高频GTX 1050Ti GAMER显卡全面评测+拆解
-
kuangbin专题专题四 Frogger POJ - 2253
-
GTX1050Ti和GTX1060显卡哪个好?GTX1050Ti/GTX1060天梯图性能对比详解
-
惠普1050打印机怎么给墨盒加墨?
-
艾尔莎推出一款单插槽设计的GTX 1050 Ti:整体厚度19毫米