輸入乙個 非空 整型陣列,陣列裡的數可能為正,也可能為負。輸入:8陣列中乙個或連續的多個整數組成乙個子陣列。
求所有子陣列的和的最大值。
要求時間複雜度為o(n)。
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...