DP 最大連續子串行 hdu 1231

2022-01-17 04:38:57 字數 1160 閱讀 5819

演算法參考:

狀態:dp[i]:以i為結尾的最大連續序列和

初始狀態:dp[i]=a[i]

狀態轉移:dp[i]=max

要求最大的,只需從dp[i]找出最大值就行了

以本題輸入樣例 「 -2 11 -4 13 -5 -2 」 為例:

序號:  0   1   2   3   4   5

a: -2  11  -4  13  -5  -2

dp: -2  11   7  20  15  13

觀察dp,終點即為 max:20,起點則為從max往前找最後乙個不為負的數,即11

ac**:

#include #include #include #include using namespace std;

const int n=10010;

int a[n],dp[n];

int main()

for(int i=1;i=0;--i)

if(dp[i]<0)

if(mymax<0)cout<<"0 "《一年後,偶遇此題又做一遍,用的是雙dp,效率還沒有上面的高:

#include #include using namespace std;

const int maxn=10000+5;

int a[maxn],dp_l[maxn],dp_r[maxn];

int n;

int main()

} ans=a[0];

for(int i=n-2;i>=0;--i)

} if(ans<0)

printf("%d %d %d\n",ans,a[start],a[end] );

} return 0;

}

還有一種方法,也挺快,不過不是用的動態規劃:

#include #include using namespace std;

const int maxn=10000+5;

int a[maxn],dp_l[maxn],dp_r[maxn];

int n;

int main()

} if(ans<0)

printf("%d %d %d\n",ans,a[start],a[end] );

} return 0;

}

HDU 最大連續子串行

最大連續子串行 problem description 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為20。在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加乙個要求,即還需要輸出該...

HDU 1231 最大連續子串行 dp

problem description 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加乙個要求,即還需要輸出該 子串行的第...

HDU 1231 最大連續子串行(DP)

給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為 20。要求得到最大和,並輸出該 子串行的第乙個和最後乙個元素。思路是dp,用f i 表示以第 i 個數字為結尾的子串行的最大和,以m i ...