国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

藍(lán)橋杯 歷屆試題 最大子陣

2019-11-10 17:36:45
字體:
供稿:網(wǎng)友

歷屆試題 最大子陣 時(shí)間限制:1.0s 內(nèi)存限制:256.0MB 提交此題 問題描述   給定一個(gè)n*m的矩陣A,求A中的一個(gè)非空子矩陣,使這個(gè)子矩陣中的元素和最大。

  其中,A的子矩陣指在A中行和列均連續(xù)的一塊。 輸入格式   輸入的第一行包含兩個(gè)整數(shù)n, m,分別表示矩陣A的行數(shù)和列數(shù)。   接下來n行,每行m個(gè)整數(shù),表示矩陣A。 輸出格式   輸出一行,包含一個(gè)整數(shù),表示A中最大的子矩陣中的元素和。 樣例輸入 3 3 -1 -4 3 3 4 -1 -5 -2 8 樣例輸出 10 樣例說明   取最后一列,和為10。 數(shù)據(jù)規(guī)模和約定   對(duì)于50%的數(shù)據(jù),1<=n, m<=50;   對(duì)于100%的數(shù)據(jù),1<=n, m<=500,A中每個(gè)元素的絕對(duì)值不超過5000。

最大子矩陣的做法是將矩陣變化, 就是把最大子矩陣變成最大連續(xù)子序列和,把二維變成一維。 如下圖 獎(jiǎng)每豎行的和記錄,形成一個(gè)新的矩陣, 這樣只需要枚舉所有的i,j,求i到j(luò)的連續(xù)和最大的數(shù)。 最后找到的就是一個(gè)矩陣

3 3-1 -4 33 4 -1-5 -2 8-1 -4 32 0 2-3 -2 10#include <iostream>#include <string>#include <cstring>#include <stdio.h>#include <cmath>using namespace std;long long d[600][600],p[600][600];int main(){ int n,m; while(cin>>n>>m) { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>d[i][j]; } }//cout<<endl; for(j=1;j<=m;j++) { long long x=0; for(i=1;i<=n;i++) { x+=d[i][j]; p[i][j]=x; } } /* for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cout<<p[i][j]<<' '; } cout<<endl; } */ int maxsum=-10000000; int x,y,z; for(i=1;i<=n;i++) { for(j=i;j<=n;j++) { int thissum=0; for(int k=1;k<=m;k++) { thissum+=p[j][k]-p[i-1][k]; if(thissum>maxsum) { x=i;y=j;z=k; maxsum=thissum; } if(thissum<0) thissum=0; } } } // cout<<x<< ' '<<y<<' '<<z<<endl; cout<<maxsum<<endl; }}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 施甸县| 南投市| 古田县| 德化县| 江永县| 永州市| 恭城| 垣曲县| 烟台市| 岑巩县| 安平县| 东山县| 上蔡县| 秦安县| 惠安县| 辽阳县| 元阳县| 天祝| 承德县| 红安县| 宜兰市| 高要市| 兴仁县| 建昌县| 乌拉特后旗| 曲水县| 高碑店市| 体育| 木里| 城固县| 旬邑县| 景德镇市| 博兴县| 松原市| 玉门市| 棋牌| 奉化市| 宁远县| 洛阳市| 青阳县| 会昌县|