日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二维数组联通子数组和最大

發布時間:2023/12/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二维数组联通子数组和最大 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

題目要求:

返回一個二維整數數組中最大聯通子數組的和。 輸入一個二維整形數組,數組里有正數也有負數。 文件輸出。

思路:和之前的動態規劃相識,把二維數組轉換為一維數組,先求每一個列的子數組和最大,最后在用正數就加,負數就跳過的方法獨立判斷

?

#include<iostream> using namespace std; #include<ctime> #include<fstream>void main() {int m,n,i,j,smark,mmark,t2;int sum;int up[100],down[100],t[100];int a[100][100],b[100];cout<<"輸入二維數組的行"<<endl;cin>>m;cout<<"輸入二維數組的列"<<endl;cin>>n;for(i=0;i<m;i++){for(j=0;j<n;j++){cin>>a[i][j];}}//輸入二維數組for(i=0;i<m;i++){for(j=0;j<n;j++){b[j]=a[i][j];}int c[100]={0};int sum1=0,max1=0,k;for(k=0;k<n;k++) //在列上求每一個最大子數組 {if(sum1<0){sum1=b[k];}else{sum1=sum1+b[k];}c[k]=sum1;}max1=c[0];for(k=0;k<n;k++) {if (max1<c[k]){max1= c[k];mmark = k;}}for (k = mmark;k >= 0;k--){if (c[k] == b[k]){smark = k;break;}}sum=max1;up[i]=smark; down[i]=mmark;t[i]=sum;}t2=t[0];for(i=0;i+1<m;i++){if(up[i]<=down[i+1] && down[i]>=up[i+1]){t2+=t[i+1];}for(j=up[i];j<up[i+1];j++){if(a[i+1][j]>0) t2+=a[i+1][j]; //判別獨立正數 }}//文件輸出ofstream fout("D:\\input.txt",ios::binary);for(i=0;i<m;i++){for(j=0;j<n;j++){fout<<a[i][j]<<" ";}fout<<endl;}fout<<"最大聯通子數組的和為:"<<t2<<endl;}

轉載于:https://www.cnblogs.com/tyyhph/p/5352373.html

總結

以上是生活随笔為你收集整理的二维数组联通子数组和最大的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。