hdu1231最大連續子串行dp

2021-08-07 07:28:35 字數 1295 閱讀 4674

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。在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加乙個要求,即還需要輸出該 子串行的第...