吉首大学第九届"新星杯"大学生程序设计大赛 M.来来来 比比咱谁更聪明
题目描述
小j和小k一起玩一个简单的小游戏,有一个容量为n的瓶子,此外还有m个容量不等杯子,他们用杯子装满水轮流往瓶子中倒水,如果谁把杯子中的水不能完全倒入瓶子中,则算输,小j先开始往瓶中倒水,两个人都足够聪明,请问,小j能赢吗?
注意: 每一个杯子可以重复用多次
输入描述
输入要求:首先输入n表示瓶子的容量,接下来输入m表示杯子的数量,
接下来输入m个数表示杯子的容量k(0<n<=1000,0<m<=1000,0<k<=1000,n,m,k都是整数
输出描述
输出要求:如果能赢则输出Y,否则输出N。
示例1
输入
10 4
2 3 6 8
输出
N
因为n,m较小,故可以模拟整个过程,当n能恰好被填满或不能再装时赢,否则输,代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5;
int main()
{
int n,m,a[N],f[N];
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(n>=a[j] && !f[n-a[j]]) f[i]=1;
}
}
printf("%c\n",f[n]?'Y':'N');
return 0;
}