洛谷P1430 序列取數

2022-05-24 01:42:11 字數 813 閱讀 7676

題目大意:給定乙個序列$s$,每個人每輪可以從兩端(任選一端)取任意個數的整數,不能不取。在兩個人都足夠聰明的情況下,求先手的最大得分。

題解:設$f_$表示剩下$[i,j]$,先手的最大得分。令$sum_=\sum\limits_^j s_k$

$$\therefore f_=sum_-\min\^i f_,\min\limits_^j f_,0\}$$

這是$o(n^3)$的,會$tle$

$$令l_=\min\limits_^j f_, r_=\min\limits_^j f_$$

$$f_=sum_-\min\,r_,0\}$$

時間複雜度:$o(n^2)$

卡點:

c++ code:

#include #include #define maxn 1010

using namespace std;

int tim, n;

int s[maxn], sum[maxn], f[maxn][maxn];

int l[maxn][maxn], r[maxn][maxn];

inline int min(int a, int b)

inline int max(int a, int b)

int main()

for(int i = 1; i <= n; i++)

}} printf("%d\n", f[1][n]);

} 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 序列取數

題面 假期真的炒雞忙www,練練車打打球看看書一天就沒了 當然還有lol 頹廢閒聊時間 而且大學在p大必然是打不上acm之類的吧,只能好好學習了w 亞歷山卓 所以oi真的只能是興趣了罷,偶爾有時間搞搞,從簡單題開始恢復一下就算是當初也很菜的實力w 好,閒話不多說。這道題貌似在lrj的藍書裡出現過,先...