BZOJ5046 分糖果遊戲

2022-05-20 18:31:40 字數 1073 閱讀 7568

題目大意:

有a,b兩個人分糖,每個人都有乙個能量值。

每個人每一輪可以選擇進行兩種操作:

1.取走最左邊的糖果,補充相應的能量值並獲取相應的美味度。

2.跳過這一輪,能量值-1.

問在每個人都採取最優決策的情況下,每個人能獲得最多的美味度是多少?

思路:動態規劃。

f[i][j]表示吃第i~n的糖,並獲得j的美味度,兩人能量值之差最小是多少。

如果輪到的人選擇吃,那麼f[i][j]=-f[i+1][suf[i]-j+1]-r[i]+1;

如果不吃,那麼f[i][j]=max(f[i+1][j]+r[i]+1,1)。

不吃的時候要滿足能量值之差》=1,因為對方同樣可以通過不吃補回來。

最後的答案k為滿足f[0][k]<=a-b的最大值,糖果最後一定能吃完,所以只要減一下就得到了兩個答案。

1 #include2 #include3 #include4 typedef long

long

int64;

5 inline int

getint()

12const int64 inf=0x4000000000000000ll;

13const

int n=151;14

intr[n],s[n],suf[n];

15 int64 f[2

][n];

16int

main()

21for(register int i=n-1;~i;i--)

24for(register int i=0;i<=s[n-1];i++)

27for(register int i=s[n-1]+1;i<=suf[0];i++)

30for(register int i=n-2;~i;i--)

37 f[i&1][j]=-f[!(i&1)][suf[i]-j+1]-r[i]+1;38

if(j<=suf[i+1

]) 41}42

}43for(register int i=suf[0];~i;i--) 48}

49 }

bzoj2330 差分約束 糖果

description 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgw...

bzoj2330糖果(差分約束)

題目描述 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgww想知道他至少...

BZOJ2330 SCOI2011糖果 差分約束

差分約束題。學了一下差分約束,我覺得還是挺簡單的,考慮f u f v c,發現和最短路的鬆弛操作神似,最短路跑完之後對於一條邊 v,u 顯然有d u d v c,不就是上面差分約束的式子嗎。那就轉化成最短 長 路做咯,以最短路為例了,對於每個f u f v c,連一條v到u權值為c的邊,然後跑最短路...