最大子串行和 HDOJ 1003 Max Sum

2022-05-21 09:47:04 字數 965 閱讀 9803

題目傳送門

題意:求mcs(最大連續子串行和)及兩個端點

分析:第一種辦法:dp[i] = max (dp[i-1] + a[i], a[i]) 可以不開陣列,用乙個sum表示前i個數字的mcs,其實是一樣的。。。類似dp的做法有個名字叫聯機演算法。

第二種辦法:乙個字首記錄前i個數字的和,那麼ans = sum - mn; mn表示前j個和且和最小

兩種辦法都是o (n) 1003就這麼難?? 推薦學習資料:六種姿勢拿下連續子串行最大和問題最大子串行和問題

收穫:mcs問題的兩種o (n) 的演算法,且還有遞迴的解法 o (nlogn)

**1:

#include #include #include using namespace std;

const int n = 1e6 + 10;

const int inf = 0x3f3f3f3f;

int a[n];

//o (n)

void mcs(int n)

else sum += a[i];

if (sum > mx)

} printf ("%d %d %d\n", mx, ll, rr);

}int main(void)

return 0;

}

**2:

//o (n) //another

void mcs(int n)

if (sum < mn)

} printf ("%d %d %d\n", mx, ll + 1, rr);

}

HDOJ 1003 最大子串行和

最開始題目都沒看懂,看了別人的部落格才知道這道題是要求最大子串行和。這裡我先歸納了三種求解最大子串行和問題的演算法,在最後給出該題的ac 直接遍歷所有可能的情況。int maxsubsequence1 int arr,int n return max sum 若將乙個序列從中分為兩半的話,該序列的和...

hdu1003最大子串行和

看了一些別人的題解,說實話,我現在還不會證明這個,我不知道為什麼這樣是最大值 hdu1003最大連續子串行和 sum i sum i 1 0 sum i 1 a i a i 只有當sum處於增長狀態時才會得到最大子串行 當sum處於減小狀態時,應當更新起點 include using namespa...

HDU1003 最大子串行和

大學搞過兩年的acm,今天心血來潮的去杭電oj上瀏覽了一下,真幸運賬號居然沒有記錯。然後想著之前學過很多經典的演算法,但是很遺憾當時沒有記錄下來,所以現在彌補遺憾的時候到了,演算法會不定期更新。include int array 100005 n void maxsubsum1 void maxsu...