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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

最大连通子数组

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

這次是求聯通子數組的求和,我們想用圖的某些算法,比如迪杰斯特拉等,但是遇到了困難。用BFS搜索能達到要求,但是還未能成功。

??? 那么我們這樣想,先將每行的最大子數組之和,然后再將這些最大之和組成一個數組,在進行求和,這樣就保證了,加入中間一行為負數,再進行篩選。增加了直接相加的正確率。

??? 實現代碼:

#include <iostream> #include <fstream> using namespace std; int Max(int Array[],int length) { int maxSumOfArray,maxSum; int first=0,last=1; maxSumOfArray=maxSum=Array[0]; //當我們加上一個正數時,和會增加;當我們加上一個負數時,和會減少。 //如果當前得到的和是個負數,那么這個和在接下來的累加中應該拋棄并重新清零,不然的話這個負數將會減少接下來的和。 for(int i=1;i<length;i++) { maxSumOfArray=max(maxSumOfArray+Array[i],Array[i]); //變量maxSumOfArray 為包含Array[i] 與Array[i] 取最大 maxSum=max(maxSum,maxSumOfArray); ////變量maxSum 為maxSum 與 maxSumOfArray 取最大 } cout<<"最大子數組和:"<<maxSum<<endl; return maxSum; } int main() { int a; int i=0,j=0; int b[10][10],c[10]; FILE * fp1 = fopen("E:\\input.txt", "r");//打開輸入文件 if (fp1==NULL) {//若打開文件失敗則退出 puts("不能打開文件!"); return 0; } int M,N; fscanf(fp1,"%d",&a); M=a; //行 cout<<"行數:"<<M<<endl; fscanf(fp1,"%d",&a); N=a; //列 cout<<"列數:"<<N<<endl; for (i=0;i<M;i++) { for(j=0;j<N;j++) { if(fscanf(fp1,"%d",&a)==1) { b[i][j]=a; cout<<b[i][j]<<" "; } } cout<<endl; } cout<<"文件已經讀取到第 "<<ftell(fp1)<<" 個偏移字節"<<endl;//輸出fp1指針當前位置相對于文件首的偏移字節數 fclose(fp1);//關閉輸入文件 int thismax[10]; //存放數組每行的最大子數組 cout<<"每行的最大數組和:"<<endl; for(i=0;i<M;i++) { for(j=0;j<N;j++) { c[j]=b[i][j]; } thismax[i]=Max(c,N); } cout<<"每行的最大子數組之和再求和"<<endl; int sum=Max(thismax,M); //每行作為一個數組再求最大的子數組和 cout<<"最大聯通子數組的和為:"<<sum<<endl; return 0; }

這種方法只能在某些情況下可以實現,更加完整的我們還在完善。

隊友 于磊http://www.cnblogs.com/cnyulei/

轉載于:https://www.cnblogs.com/L-Damon-v/p/5360829.html

總結

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

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