1 条题解
-
0
这是啥博弈?
思路
首先考虑贪心,每次取石子能取多少取多少,硬模拟,喜提50WA。(姑且不知道hack数据)
注意到,,考虑进行DP。定义表示剩余个石子时先手可以取多少石子,转移方程如下(,):
AC代码
#include<bits/stdc++.h> using namespace std; const int N=1e4+10; int a[N],n,k,f[N]; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=k;i++)scanf("%d",&a[i]),f[a[i]]=a[i]; for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)if(a[j]<=i) { f[i]=max(f[i],a[j]+(i-a[j]-f[i-a[j]])); } // for(int i=1;i<n;i++)printf("%d ",f[i]); printf("%d\n",f[n]); return 0; }
- 1
信息
- ID
- 10021
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 2
- 上传者