ABC270DStones
Posted Syara
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABC270DStones相关的知识,希望对你有一定的参考价值。
首先很显然直接贪心是不行的,就好像背包的时候一直选价值最大的肯定会假一样。
诶?背包?这题还真有点像背包。
考虑像背包一样设,\\(f_i\\) 表示剩下 \\(i\\) 个石子的先手最大获得石头数。
设最后一步拿走了 \\(m\\) 颗石子,显然 \\(m\\in A\\)。那么有 \\(f_i=i-f_i-m\\)(总共 \\(i\\) 个嘛,对手肯定也是按照这个最优方案搞的,那么拿走的就是是 \\(f_i-m\\))。
然后直接 \\(O(NK)\\) 就把这题冲过了。
#include <stdio.h>
int val[10005];
int f[10005];
inline int max(int x,int y)
return x>y?x:y;
int main()
int n,i,j,k;scanf("%d %d",&n,&k);
for(i=1;i<=k;++i)
scanf("%d",val+i);
for(i=1;i<=n;++i)
for(j=1;j<=k;++j)
if(i>=val[j])
f[i]=max(f[i],i-f[i-val[j]]);//这一坨真的很像背包诶。
//个人认为这题用到了背包的思想。
printf("%d",f[n]);
return 0;
以上是关于ABC270DStones的主要内容,如果未能解决你的问题,请参考以下文章
ABC-270 F - Transportation(kruskal)