演算法參考:
狀態: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 ...