題目大意:
有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 longlong
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的邊,然後跑最短路...