您的位置:首页 > 其它

HDU 1427 速算24点(DFS) *

2017-01-19 20:54 375 查看
原题链接:Here!

思路:这是get的别人的代码,写的很棒,用next_permutation()取代了括号的作用,精髓,经典

代码:
/*
Note:
代码写的非常(๑•̀ㅂ•́)و✧
用next_permutation()代替括号的作用

*/
#include<bits/stdc++.h>
using namespace std;
//#define test

int res[4];
bool ok;

void dfs(int sum,int cur,int temp){
if(ok)	return;
if(cur==3){
if(sum+temp==24) ok=true;
if(sum-temp==24) ok=true;
if(sum*temp==24) ok=true;
if(temp!=0 && sum%temp==0 && sum/temp==24) ok=true;
return;
}
dfs(sum+temp,cur+1,res[cur+1]);
dfs(sum-temp,cur+1,res[cur+1]);
dfs(sum*temp,cur+1,res[cur+1]);
if(temp!=0 && sum%temp==0)
dfs(sum/temp,cur+1,res[cur+1]);

dfs(sum,cur+1,temp+res[cur+1]);
dfs(sum,cur+1,temp-res[cur+1]);
dfs(sum,cur+1,temp*res[cur+1]);
if(res[cur+1]!=0 && temp%res[cur+1]==0)
dfs(sum,cur+1,temp/res[cur+1]);
}
int main(){
char s[4];
#ifdef test
freopen("test.txt","r",stdin);
#endif
while(1){
for(int i=0;i<4;i++){
if(scanf("%s",s)==EOF)	return 0;
if(s[0] == 'A') res[i] = 1;
else if(s[0] == 'J') res[i] = 11;
else if(s[0] == 'Q') res[i] = 12;
else if(s[0] == 'K') res[i] = 13;
else if(s[0] == '1' && s[1] == '0') res[i] = 10;
else res[i] = s[0] - '0';
}
sort(res,res+4);
ok=false;
do{
dfs(res[0],1,res[1]);
}while(next_permutation(res,res+4) && !ok);
if(ok)	printf("Yes\n");
else 	printf("No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: