AC日记——最大子段和 洛谷 P1115
生活随笔
收集整理的這篇文章主要介紹了
AC日记——最大子段和 洛谷 P1115
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
給出一段序列,選出其中連續(xù)且非空的一段使得這段和最大。
輸入輸出格式
輸入格式:
?
輸入文件maxsum1.in的第一行是一個(gè)正整數(shù)N,表示了序列的長(zhǎng)度。
第2行包含N個(gè)絕對(duì)值不大于10000的整數(shù)A[i],描述了這段序列。
?
輸出格式:
?
輸入文件maxsum1.out僅包括1個(gè)整數(shù),為最大的子段和是多少。子段的最小長(zhǎng)度為1。
?
輸入輸出樣例
輸入樣例#1:7 2 -4 3 -1 2 -4 3 輸出樣例#1:
4
說明
【樣例說明】2 -4 3 -1 2 -4 3
【數(shù)據(jù)規(guī)模與約定】
對(duì)于40%的數(shù)據(jù),有N ≤ 2000。
對(duì)于100%的數(shù)據(jù),有N ≤ 200000。
?
思路:
水題使我快樂;
dp[i][3];
i表示當(dāng)前在序列中的位置;
j=2,表示當(dāng)前位置及以前出現(xiàn)的最大值;
j=1,表示,當(dāng)前位置的最大值;
j=0,表示,序列中第i個(gè)數(shù);
方程見代碼;
?
來,上代碼:
#include <cstdio> #include <iostream>using namespace std;int if_z,n,dp[200005][3],ans;char Cget;inline void in(int &now) {now=0,if_z=1,Cget=getchar();while(Cget>'9'||Cget<'0'){if(Cget=='-') if_z=-1;Cget=getchar();}while(Cget>='0'&&Cget<='9'){now=now*10+Cget-'0';Cget=getchar();}now*=if_z; }int main() {in(n);dp[0][2]=dp[0][1]=-0x7ffffff;for(int i=1;i<=n;i++){in(dp[i][0]);dp[i][1]=max(dp[i][0],dp[i-1][1]+dp[i][0]);dp[i][2]=max(dp[i-1][2],dp[i][1]);}cout<<dp[n][2];return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6492260.html
總結(jié)
以上是生活随笔為你收集整理的AC日记——最大子段和 洛谷 P1115的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解 TCP(五):可靠性交付的实现
- 下一篇: js中的类、继承、闭包