找最大子矩阵
1.題目。
題目:返回一個整數(shù)數(shù)組中最大子數(shù)組的和。
要求:
輸入一個整形數(shù)組,數(shù)組里有正數(shù)也有負數(shù)。
數(shù)組中連續(xù)的一個或多個整數(shù)組成一個子數(shù)組,每個子數(shù)組都有一個和。
求所有子數(shù)組的和的最大值。要求時間復(fù)雜度為O(n)。
程序要使用的數(shù)組放在一個叫 input.txt 的文件中,? 文件格式是:
數(shù)組的行數(shù),
數(shù)組的列數(shù),
每一行的元素,? (用逗號分開)
2.設(shè)計思想。
先將intput.txt中的矩陣寫入二維數(shù)組s[][]中,實現(xiàn)每相鄰兩行相加,相鄰三行相加,一直到所有行相加,然后再求沒個一維數(shù)組的最大子矩陣。
3.代碼。
#include<iostream.h> #include<fstream.h> #define MAX 1000 #define Max 1000 int qiuzuidazishuzu(char a[],int k) //k為列數(shù); {int m=0,b[MAX],n=0;for(int l=1;l<k+1;l++){for(int i=0;i<2*k-(2*l-1);i=i+2){for(int j=i;j<i+2*l-1;j=j+2){if(j>2*k-1){break;}elsem=m+a[j]-48;}b[n]=m;m=0;n=n+1;}}int max=b[0];for(int i=1;i<n;i++){if(max<b[i])max=b[i];}return max; }int main() {int h,l,a[100],n=0,p=0;int e[100]={0};char s[100][100];char r,t;ifstream inFile("intput.txt",ios::in);inFile>>h>>r>>l>>t;for(int i=0;i<h;i++){inFile>>s[i];}for(i=0;i<h;i++){cout<<s[i]<<endl;}for(i=0;i<3;i++){a[i]=qiuzuidazishuzu(s[i],l);}for(i=0;i<2;i++){for(int j=0;j<5;j=j+2){s[i][j]=s[i+1][j]+s[i][j]-48;}}for(i=0;i<2;i++){a[i+3]=qiuzuidazishuzu(s[i],l);}for(int j=0;j<5;j=j+2)s[0][j]=s[0][j]+s[2][j]-48;for(i=0;i<1;i++){a[i+5]=qiuzuidazishuzu(s[i],l);}for(i=0;i<10;i++){if(a[0]<a[i])a[0]=a[i];}cout<<"最大子矩陣的值為:";cout<<a[0]<<endl;;return 0; }4.實驗截圖。
?
5.體會。
多個人結(jié)組編寫程序,可以提出更多意見,使程序更完善。
?
轉(zhuǎn)載于:https://www.cnblogs.com/nulidexuezha/p/4369455.html
總結(jié)
- 上一篇: hdu 4607 Park Visit
- 下一篇: 常见的无线模块