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 D - Stones(dp)

ABC-270 F - Transportation(kruskal)

在 PySpark 中加入 270 列

如何将包含图像的画布旋转 90、180、270 度?

从部门 id 以 250 和 270 开头的表中派生所有员工?

如何将整个网页旋转90度,180度或270度?