洛谷 P1430 序列取數

2022-06-03 08:00:10 字數 915 閱讀 6891

題面

假期真的炒雞忙www,練練車打打球看看書一天就沒了(當然還有lol & 頹廢閒聊時間)。

而且大學在p大必然是打不上acm之類的吧,只能好好學習了w(亞歷山卓)

所以oi真的只能是興趣了罷,偶爾有時間搞搞,從簡單題開始恢復一下就算是當初也很菜的實力w

好,閒話不多說。

這道題貌似在lrj的藍書裡出現過,先手得分max等價於 (先手得分-後手的)max,因為兩者和為定值。

這樣就可以得到乙個 o(n^3) 的dp,然後我們把從前取和從後取分別字首or字尾 優化一下(具體見**注釋),就可以做到 o(n^2) 啦!

#include#define ll long long

using namespace std;

const int n=1005;

int dp,w,f[n][n],g[n][n],a[n],n,t;

/*

dp[i][j] means the max delta between the first and the second.

f[i][j] = min

g[i][j] is similar... (reverse)

and there w[i][j] means the sum of a[k](k from i to j)

initially, dp[i][i] = a[i], f[i][i]=g[i][i]= 2*a[i].

except the initial, dp[i][j] = w[i][j] - min(f[i+1][j],g[i][j-1],0)

finally the ans is (dp[1][n]+w[1][n])/2.

*/inline void solve()

int main()

return 0;

}

洛谷 P1430 序列取數

給出乙個序列,兩人輪流從一端開始取任意個數,最後所取數的和即為得分,兩人都想要較高得分,則先去者的最高得分是多少。首先不難想到用dp i j 表示序列剩下從i到j這段時的最高得分,這樣的話有n 2種狀態,n的狀態轉移,總複雜度為n 3,會t。因此可以考慮記錄下述值 le i j 表示從左邊開始取,剩...

洛谷P1430 序列取數

給定乙個長為n的整數序列 n 1000 由a和b輪流取數 a先取 每個人可從序列的左端或右端取若干個數 至少乙個 但不能兩端都取。所有數都被取走後,兩人分別統計所取數的和作為各自的得分。假設a和b都足夠聰明,都使自己得分盡量高,求a的最終得分。輸入格式 第一行,乙個正整數t,表示有t組資料。t 10...

洛谷P1430 序列取數

題目大意 給定乙個序列 s 每個人每輪可以從兩端 任選一端 取任意個數的整數,不能不取。在兩個人都足夠聰明的情況下,求先手的最大得分。題解 設 f 表示剩下 i,j 先手的最大得分。令 sum sum limits j s k therefore f sum min i f min limits j...