Uva 10891 經典博弈區間DP

2022-04-01 07:18:17 字數 831 閱讀 6232

經典博弈區間dp

題意:給定n個數字,a和b可以從這串數字的兩端任意選數字,一次只能從一端選取。

並且a b都盡力使自己選擇的結果為最大的,可以理解成a b每一步走的都是最優的。

如果a先選擇,則a b差值最大是多少。

分析:總和是一定的,所以乙個得分越高,另乙個人的得分越低。當前狀態總是最開始的狀態的乙個子狀態。

d(i,j): 先手取 i ~ j 最優策略下,得分最大值。

d(i,j) = sum(i,j) - min(d(i+1,j),d(i+2,j),...,d(j,j),  d(i,j-1),d(i,j-2),...,d(i,i),0)

0表示全部取完;

答案就是 d(1,n) - ( sum(1,n) - d(1,n) );

tip: sum(i,j) 可以在 o(1) 的時間內求出來。 s[i] 是 1~ i 的和,那麼 sum(i,j) = s[j] - s[i-1];

#include using

namespace

std;

intn;

const

int maxn = 100 + 10

;int

s[maxn],a[maxn],d[maxn][maxn],vis[maxn][maxn];

int dp(int i,int

j) int

main()

memset(vis,

0,sizeof

(vis));

printf(

"%d\n

",2*dp(1,n)-s[n]);

}return0;

}

Sum遊戲 Uva10891 區間dp

給定乙個序列,a,b玩家輪流取數,每次只能從一段取若干個數,乙個人取數的和代表該人的得分,若a,b都採取最優策略,問a的得分 b的得分 對於都是正數的情況,肯定一次取完就可以。但是由於有負數,所以我們就要考慮列舉取法 已知取完後的序列一定是原序列的乙個子串行,因此,我們列舉取法 dp i j 表示剩...

UVA 10881 經典模擬題

題目大意 一根長l厘公尺的木棍上有n只螞蟻,每只螞蟻有個開始的位置和爬行方向,速度為1.當兩隻螞蟻相撞後,兩者同時掉頭繼續爬行,求按輸入順序給出每只螞蟻t秒後的位置後朝向。解題思路 1.每只螞蟻相撞後同時掉頭可以看做對穿而過,關鍵的問題就在於求位置的變化。2.按位置從小到大排序,可以驚奇的發現排序後...

UVA 571 Jugs(經典倒水問題)

題意 在電影 虎膽龍威3 中,布魯斯和傑克遜要面對這樣乙個問題,他們有乙個3加侖的杯子和乙個5加侖的杯子,他們被問這麼把5加侖的杯子裡面填滿4加侖的水。這個問題可以被描述為這樣乙個謎題。你擁有兩個杯子a和b,以及無盡的水。你可以執行以下3種操作 1.填滿1個杯子的水 2.倒空1個杯子的水 3.將1個...