wa的**,我還不知道wa在**。
#include
using
namespace
std;
#include
long
long num[10005];
struct node
dp[10005];
int main()
else
}dp[1].start=1;
long
long max=-0x3f3f3f;
int nnum=0;
for(i=1;i<=k;i++)
}if(max<0)
else
printf("%lld %d %lld\n",dp[nnum].sum,num[dp[nnum].start],num[dp[nnum].end]);
/*long long sum=0;
long long max=0;
for(i=0;i=0)
max=max(max,sum);
else
sum=0;
}printf("%lld\n",max);*/
}return
0;}
最大連續子串行算是dp中比較簡單的情況了吧,有的時候都不需要用到狀態轉移方程,比如這個題這種的,就是只求正的最大連續子串行,如果拋開需要輸出這個最大子串行的頭尾的話,就只需要設乙個sum,乙個max,如果sum>0,就加上新的,然後如果sum<0了,就無論如何sum都是乙個「拖累」,所以sum變成num【i】,但是這樣不能求負數的最大連續子串行。
其實dp狀態方程應該是dp[i]=max(dp[i-1]+num[i],num[i]);這個狀態轉移方程我覺得是比較好理解的了,但是我最開始都沒有想到,笨!
為了記錄最大連續子串行的頭跟尾,我又開了乙個結構體,其實感覺不需要這麼複雜的,因為在acm中,感覺更好的方法不是儲存,而是更新!
一會兒敲乙份大神的**上來!
#include
using namespace std;
int num[10005],dp[10005];
int main()
else
cnt+=num[i];
if(cnt>max)
}if(max<0)
printf("%d
%d%d\n",max,left,right);
}return
0;}
☝我真的好喜歡這個大神的**風格,簡潔乾淨,特別好!雖然有的時候可能邏輯性比較強然後就看不懂什麼的! hdu 1231 最大連續子串行
狀態方程dp i max dp i 1 a i a i dp 0 a 0 include include include include include include include include include include include include include includeus...
HDU 1231 最大連續子串行
problem description 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加乙個要求,即還需要輸出該 子串行的第...
HDU1231 最大連續子串行
problem description 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加乙個要求,即還需要輸出該 子串行的第...