FOJ 1018 Maximal Sum
2011-01-08 13:59
225 查看
本题的中文描述:
给定一个由N*N*N 个整数组成的立方体,定义其和为N*N*N个数的和。现在,给你一个N*N*N 个整数组成的立方体,请你从中找出一个和最大的子长方体(可与给定的立方体相同)。
例如,对于立方体:
0 -1 3
-5 7 4
-8 9 1
-1 -3 -1
2 -1 5
0 -1 3
3 1 -1
1 3 2
1 -2 1
其和最大的子长方体为:
7 4
9 1
-1 5
-1 3
3 2
-2 1
它的和为31。
本题是三维的情况,二维情况为求最大子矩阵问题,一维的情况为最大子段和问题。。。
二维版的问题,poj 1050,大家可以参考这篇解题报告。http://www.slyar.com/blog/poj-1050-cpp.html
本题的情况就是先求出子矩阵,然后再转换成POJ 1050的解法,就行了。。
WA了好几次,郁闷,题目没看懂。。ORZ。。
给定一个由N*N*N 个整数组成的立方体,定义其和为N*N*N个数的和。现在,给你一个N*N*N 个整数组成的立方体,请你从中找出一个和最大的子长方体(可与给定的立方体相同)。
例如,对于立方体:
0 -1 3
-5 7 4
-8 9 1
-1 -3 -1
2 -1 5
0 -1 3
3 1 -1
1 3 2
1 -2 1
其和最大的子长方体为:
7 4
9 1
-1 5
-1 3
3 2
-2 1
它的和为31。
本题是三维的情况,二维情况为求最大子矩阵问题,一维的情况为最大子段和问题。。。
二维版的问题,poj 1050,大家可以参考这篇解题报告。http://www.slyar.com/blog/poj-1050-cpp.html
本题的情况就是先求出子矩阵,然后再转换成POJ 1050的解法,就行了。。
WA了好几次,郁闷,题目没看懂。。ORZ。。
#include <iostream> using namespace std; int cube[20][20][20]; int area[20][20]; int num[20]; int main() { int n,i,j,k,p,q,max,sum,cnt; while(scanf("%d",&n)&&n) { cnt=-200; for(i=0;i<n;++i) { for(j=0;j<n;++j) { for(k=0;k<n;++k) scanf("%d",&cube[i][j][k]); } } for(p=0;p<n;++p) { memset(area,0,sizeof(area)); for(q=p;q<n;++q) { for(i=0;i<n;++i) { for(j=0;j<n;j++) area[i][j]+=cube[q][i][j]; } for(i=0;i<n;++i) { memset(num,0,sizeof(num)); for(j=i;j<n;++j) { for(k=0;k<n;++k) num[k]+=area[j][k]; max=-200; sum=0; for(k=0;k<n;++k) { if(sum>0) sum+=num[k]; else sum=num[k]; if(sum>max) max=sum; } if(max>cnt) cnt=max; } } } } printf("%d/n",cnt); } return 0; }
相关文章推荐
- FOJ 1018 Maximal Sum(三维子矩最大和)
- 在C#中使用MSHTML的高级支持接口(引自http://www.vckbase.com/document/viewdoc.asp?id=1018)
- POJ 2688 FOJ 1634 Cleaning Robot
- FOJ 1011使用非KMP算法AC!!
- FOJ 1481 环串
- FOJ 1036
- FOJ 1409 文件压缩
- FOJ--1490--五子棋--解题报告
- Foj 1881 三角形问题
- poj 1018 Communication System
- FOJ 1914. Funny Positive Sequence 【单调队列优化】
- Foj 1715 Ball and Box
- FOJ 2013 A short problem 解题报告
- FOJ 1056之扫雷游戏
- HDOJ 1018 Big Number
- hdoj1018
- hdu 1018
- HDU 1018 Big Number(求n!的位数)
- HDOJ1018 ( Big Number ) 【斯特林公式---处理阶乘及阶乘位数的问题】
- poj1018