地址:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1998
思路:枚举每一种情况,要注意对于输入中的牌点数11,12,13,都是10。。。枚举Alice的要牌数目,对于每次的要牌只要有一次是必赢的,那么就为YES,否则为NO
Code:
#include<iostream>
using namespace std;
const int MAX_N=50;
int n;
int d[MAX_N];
int main()
{
ios::sync_with_stdio(false);
while(cin>>n){
for(int i=0;i<n;++i)
{
cin>>d[i];
d[i]=min(d[i],10);
}
int a=d[0]+d[2],b=d[1]+d[3],s1=0;
bool boo=false,p=true;
if(a>21||(b<=21&&a<=b)) p=false;
for(int i=4,t=b;i<n;++i)
{
t+=d[i];
if(t<=21&&t>=a){
p=false; break;
}
}
if(p==true) boo=true;
for(int i=4;i<n&&!boo;++i)
{
a+=d[i];
if(a>21) break;
s1=b;
p=true;
if(s1<=21&&s1>=a) p=false;
for(int j=i+1;j<n;++j)
{
s1+=d[j];
if(s1<=21&&s1>=a){
p=false; break;
}
}
if(p==true) boo=true;
}
if(boo==true) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}