最大子陣列和04

2022-07-19 01:24:13 字數 2833 閱讀 9967

1、題目要求:

返回乙個二維陣列中最大連通子陣列的和

從input.txt 檔案中讀入乙個二維整形陣列,陣列裡有正數也有負數。

2、實現思路:

(1)先要能夠讀入txt 文件中的各數的值;

(2)將讀出的行數、列數、陣列中的數分別儲存;

(3)每一行都存在乙個最大的子陣列和;

(4)將每行最大的子陣列和以最小的代價連線起來,將代價與各個和加在一起,可以得出最大值

(1)讀入txt 文件中的各數的值,第一行是行數,存給 line ,第二行是列數,存到row,剩下的數存入陣列array【】【】中;

(2)從第一行開始,按照前幾次實驗的方法,找出每一行中的最大子陣列和,存入array2【】中;並找到這個最大子陣列和的陣列的最小下標min_i 和最大下標max_i 分別存入mini【】和maxi【】中;

(3)將每一行中的最大最小下標與下一行的最小最大

下標相比,聯通,則這兩行的最大子陣列和為兩行的最大子陣列和相加;

(4)若不能聯通,選擇乙個最小代價路徑使其聯通;

(5)看有無其他的正數與這一條聯通的線相連,若有,加到總和上。

4、源**:

1 #include 2 #include 3 #include 

4using

namespace

std ;56

7int maxcount(int n,int a,int *min_i,int *max_i)//

求一行中的最大子陣列和8;

10int i,sum=0,max=0;11

for(i=0;i)

1217

else

1821 b[i]=sum;22}

23 max=b[0

];24

for(i=0;i)

2531}32

for (i = *max_i;i >= 0;i--)

3339}40

return

max;41}

4243

44int

main()

4554

intline,row;

55int array[100][100],array2[100];//

陣列array 是二維陣列,array2 是每行的最大子陣列和組成的陣列

56 infile.getline( str, sizeof(str) );//

獲取行數

57 sscanf( str , "

%d" , &line);

58 infile.getline( str, sizeof(str) );//

獲取列數

59 sscanf( str , "

%d" , &row );

60 cout <

二維陣列共

"<< line <

<< row<

61 cout <

二維陣列:

"<

62for(i=0;i//

讀取二維陣列

6368}69

for(i=0;i//

輸出二維陣列

7076 cout <

78infile.close();

7980

81int

min_i;

82int max_i;//

最大子陣列和數的下標

83int countmax;//

最大子陣列的和數的下標

84int

sum,max;

85int mini[100],maxi[100],t[100

];86

for(i=0;i)

8792 sum=maxcount(row,array2,&min_i,&max_i);

93 mini[i]=min_i; //

儲存最大和子陣列的最小下標

94 maxi[i]=max_i; //

儲存最大和子陣列的最大下標

95 t[i]=sum;96}

97 countmax=t[0

];98

for(i=0;i+1)99

104105

for(j=mini[i];j1];j++)

106

111}

112}

113 cout<

\n 最大聯通子陣列和為:

"114return0;

115 }

5、執行結果:

專案計畫日誌(單位:h):

聽課編寫程式

閱讀相關書籍

網上查詢資料

日總計週六02

00.5

2.5週日02

114周一

0201

3時間記錄日誌(單位:min):

日期開始時間

結束時間

中斷時間

淨時間活動

備註星期六

8:00

11:30

30(洗漱)

150查資料,程式設計

星期日8:30

11:00

140查資料,程式設計

15:00

18:00

100程式設計

星期一8:30

11:00

160查資料,程式設計

最大子陣列和

問題描述 給定乙個整數陣列a 0 n 求陣列a的子陣列,使其元素和為最大。問題分析 方法一 可以用普通的方法列舉所有的子陣列,然後求出最大的子陣列和,時間複雜度為o n n 方法二 問題描述符合動態規劃最優子結構的要求。設b i 表示以a i 結尾的子陣列的最大子段和,即 b i max,其中0 j...

最大子陣列和

給定乙個陣列 求出陣列的最大子陣列和 其中包含正,負 和0 很簡單把每個子陣列的和求出來話不多說看 方法1暴力求解法 把所有的子陣列都求解出來o n2 public static intgetmaxsubarr int arr return res 第二種方法 dp求解 很簡單理解加上當前的數arr...

最大子陣列和

使用動態規劃 f i 以array i 為末尾元素的子陣列的和的最大值,子陣列的元素的相對位置不變 f i max f i 1 array i array i res 所有子陣列的和的最大值 res max res,f i 如陣列 6,3,2,7,15,1,2,2 初始狀態 f 0 6 res 6 ...