dp最大區間和最大矩陣

2021-10-18 22:58:33 字數 1413 閱讀 6099

輸入乙個 非空 整型陣列,陣列裡的數可能為正,也可能為負。

陣列中乙個或連續的多個整數組成乙個子陣列。

求所有子陣列的和的最大值。

要求時間複雜度為o(n)。

輸入:8

1 -2 3 10 -4 7 2 -5

輸出:18

解析:首先我們因該知道 a[ i ]前乙個位置的區間最大值影響 a[ i ]位置區間最大。

我們分析陣列每乙個元素都為必選,對於陣列裡必選第i個數a[ i ],

所以到必選a[ i ] 的位置時,這時區間最大應該為 ma = max(a[i] , ma + a[i]) 。(若ma <0,我們就捨棄前面區間的元素,而只保留自己才是最大值)

ma為a[ i - 1]時區間最大的值,所以要從前向後遞推。

#include

#include

#include

#include

using

namespace std;

const

int n =

1006

;int a[n]

;int

main()

printf

("%d\n"

,ans)

;return0;

}

給定乙個包含整數的二維矩陣,子矩形是位於整個陣列內的任何大小為1 * 1或更大的連續子陣列。

矩形的總和是該矩形中所有元素的總和。

在這個問題中,具有最大和的子矩形被稱為最大子矩形。

例如,下列陣列:

0 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

其最大子矩形為:

9 2-4 1

-1 8

它擁有最大和15。

我們把現在這道題轉化為上面一道題就可以,這道題是二維的,我們把陣列寬度固定,就可以轉化成了上一道題。

#include

#include

#include

#include

#include

#include

int ar[

106]

[106];

using

namespace std;

intmain()

//求字首和

int ans = int_min,res;

for( i =

1;i <= n;i++

)// j和k代表行和列座標,而i代表寬度的變化}}

printf

("%d\n"

,ans)

;return0;

}

乘積最大 (區間DP)

一本通 1275 例9.19 乘積最大 題目描述 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有...

乘積最大 區間型dp

題目描述 description 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數...

最大區間和變形 codeforces

題意 可以選擇操作一串區間,將區間內的某乙個數全部變成乙個新的數字,詢問整個區間中某個數字的出現次數總共有多少個?思路分析 首先最後選的一定是乙個區間,然後 ans cnt 1,l 1,c cnt r 1,n,c cnt l,r,d ans cnt 1,n,c cnt l,r,c cnt l,r,d...