在乙個陣列中找出和最大的連續幾個數。(至少包含乙個數)
例如:陣列a = [−2, 1, −3, 4, −1, 2, 1, −5, 4],則連續的子串行[4,−1,2,1]有最大的和6.
輸入格式
第一行輸入乙個不超過1000的整數n。
第二行輸入n個整數a[i]。
輸出格式
第一行輸出乙個整數,表示最大的和。
#include#includeusing namespace std;
int dp[1010]; //dp[j]表示子串的和,如果d[j-1]>0那麼的d[j]=d[j-1]+a[j],否則的d[j]=a[j]
//因為一旦d[j-1]<0,後面的數+d[j-1]肯定《後面的數 所以dp[j]=a[j]斷開以前子串和
int ans;
int main()
cin>>n;
for(int i=0;i>a[i];
} ans=dp[0]=a[0]; //初始化 ans=dp[0]=1;
for(int j=1;j0; dp[1]=1+2=3;
else
ans=max(dp[j],ans); //不斷尋找dp中的最大值
} cout<
#include#include#includeusing namespace std;
//注意:在理解最大子段和的基礎上再研究這個
//因為題目中說明連續,所以行和列是連續的,
int main()
,dp[51]; //a[51][51]表示矩陣,b[51]表示子矩陣的和 ,詳見下面詳細例子
int ans=-999;
cin>>n>>m;
for(int i=0;i>a[i][j];
} }for(int st=0;st0)
else
ans=max(ans,dp[k]);
}} }
cout<
最大子陣和(動態規劃)
題目描述 有乙個包含正數和負數的二維陣列。乙個子矩陣是指在該二維陣列裡,任意相鄰的下標是1 1或更大的子陣列。乙個子矩陣的和是指該子矩陣中所有元素的和。本題中,把具有最大和的子矩陣稱為最大子矩陣。例如 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 這個陣列的最大子矩陣為 9 2 4...
最大子段(陣)和
這是一道dp經典題 感覺什麼都經典 也是很常見的乙個題型,具體思路就是用sum記錄乙個字首和,從a 1 遍歷到a n 每次,加上去,但是一旦sum成了負數,就沒必要字首和了,重新賦值0 因為前面就是累贅了 然後,就做出來了.1 include2 using namespace std 3int n,...
動態規劃 最大子段和
給定乙個陣列a a0,a1,a2,an 求陣列中 連續子段之和 的最大值。1 最簡單的演算法 窮舉法 計算所有的連續子段之和,得出最大值 窮舉法 計算所有的子串行和 o n 3 public static int maxsum1 int data max tmp max tmp max return...