论文网站建设,高端品牌网站建设电商网站设计,国外网站策划,北京做推广的公司题目#xff1a; SubRaY有一天得到一块西瓜,是长方体形的....SubRaY发现这块西瓜长m厘米,宽n厘米,高h厘米.他发现如果把这块西瓜平均地分成m*n*h块1立方厘米的小正方体,那么每一小块都会有一个营养值(可能为负,因为西瓜是有可能坏掉的,但是绝对值不超过200).现在SubRaY决定从这… 题目 SubRaY有一天得到一块西瓜,是长方体形的....SubRaY发现这块西瓜长m厘米,宽n厘米,高h厘米.他发现如果把这块西瓜平均地分成m*n*h块1立方厘米的小正方体,那么每一小块都会有一个营养值(可能为负,因为西瓜是有可能坏掉的,但是绝对值不超过200).现在SubRaY决定从这m*n*h立方厘米的西瓜中切出mm*nn*hh立方厘米的一块小西瓜(一定是立方体形,长宽高均为整数),然后吃掉它.他想知道他最多能获得多少营养值.(0mmm,0nnn,0hhh.mm,nn,hh的值由您来决定).换句话说,我们希望从一个m*n*h的三维矩阵中,找出一个三维子矩阵,这个子矩阵的权和最大. 一个2*3*4的例子,最优方案为切红色2*3*1部分 输入格式 Input Format 首行三个数h,m,n(注意顺序),分别表示西瓜的高,长,宽.以下h部分,每部分是一个m*n的矩阵,第i部分第j行的第k个数表示西瓜第i层,第j行第k列的那块1立方厘米的小正方体的营养值. 输出格式 Output Format SubRaY所能得到的最大营养值 样例输入 Sample Input 2 3 44 1 2 80 5 -48 43 0 1 92 1 4 91 0 1 73 1 2 8 样例输出 Sample Output 45 时间限制 Time Limitation 1s 注释 Hint 对于30%的数据,h1,1m,n10对于全部的数据,1h32,1m,n50,保证hm,n 来源 Source noip 模拟赛 因为数据比较小所以不会超时的。你先处理下这一层这个位置和上个位置的累加和然后在处理每一列的累加和。 然后每次运算只用从左开始往右进行累加算的就是一个矩阵了。 #includeiostream
#includecstdio
#includecstring
#includealgorithm
#includecmath
using namespace std;
int a[52][52][52];
int c[52][52][52];
int b[1000];
int p[1000];
int main()
{int h,m,n;//高长宽cinhmn;for(int w1;wh;w){for(int i1;im;i){for(int j1;jn;j)cina[w][i][j],c[w][i][j]a[w][i][j];}}for(int w1;wh;w){for(int i1;im;i){for(int j1;jn;j){c[w][i][j]c[w-1][i][j];}}}for(int w1;wh;w){for(int i1;im;i){for(int j1;jn;j){c[w][i][j]c[w][i-1][j];}}}/*coutendl;for(int w1;wh;w){for(int i1;im;i){for(int j1;jn;j){coutc[w][i][j] ;}coutendl;}}*/int ans0;for(int w1;wh;w)//第几层{for(int H1;Hw;H)//w层上面选几层{for(int i1;im;i)//第i行{for(int t1;ti;t)//这行上面的t行{memset(b,0,sizeof(b));memset(p,0,sizeof(p));for(int k1;kn;k)//从左往右加{p[k]c[w][i][k]-c[H-1][i][k]-c[w][t-1][k]c[H-1][t-1][k];b[k]max(b[k-1]p[k],p[k]);if(b[k]ans)ansb[k];}}}}}coutansendl;return 0;
} 程序里有标注 转载于:https://www.cnblogs.com/lcyhaha/p/7387842.html