poj2479分步DP精簡成O n 演算法

2021-07-03 04:28:07 字數 613 閱讀 3801

//提取資訊包括從s到t之間的和

//但是n較大這樣dp[i][j]的形式顯然不行,那麼如果轉換

//其實我們除了記錄[i,j]之間的和那麼可以記錄以i開頭和以i結尾兩種情況

//後來發現根本不用記錄以什麼為開頭或者結尾,每次更新前面一段值就行

//725k 438ms

#include using namespace std;

#define max_n 50010

//static int dp1[max_n];//以字元i開頭的最大和

//static int dp2[max_n];//以字元i結尾的最大和

static int n;

static int a[max_n];

static void dp()

//找出開頭狀態的最大值

for (int i=n-2;i>=0;i--)

//組合

for (int i=0;ians = max(ans,rest1[i]+rest2[i+1]);

printf("%d\n",ans);

}int main()

return 0;

}

POJ 2479的簡單想法

這道題是簡單的dp例題拓展,問題是 給定一行數字,然後求這行數字中兩個連續子串行和的最大值,並輸出 兩個子串行不能有重疊的部分 由於是初學者,可能想法比較侷限。我的總體思路是這樣 這題肯定和最大求子序列有關,然後進行工作 用dp1 i 表示以第i個數結尾的最大子串行的和,用dp i 表示已第i個數為...

POJ 2479 最大子段和

poj 2479 最大子段和 poj 2479嚴格來說不是單純的最大子段和,它是乙個雙向的最大子段和,為了弄清雙向的最大子段和就必須弄清楚單向的最大子序和。單向最大子段和問題如下 在序列a 1.n 任意乙個ai都是整數,有正有負 中找出乙個子串行a p.q 使得m ap ap 1 aq 1 aq最大...

6 4 3 分步分析(Evaluating)示例

6.4.3 分步分析 evaluating 示例 能這像這樣自信地使用高階函式,是需要一些時間的,尤其是巢狀使用。我們將研究前面清單中的 的地,通過跟蹤幾個樣本輸入。從抽象的問題 一般情況下這段 做什麼?到具體的問題 特定情況下這段 做什麼?通常可以幫助澄清真相。如果我們第一次輸入乙個無效的值,會發...