HDU 1427 速算24点(DFS) *
2017-01-19 20:54
375 查看
原题链接:Here!
思路:这是get的别人的代码,写的很棒,用next_permutation()取代了括号的作用,精髓,经典
代码:
思路:这是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; }
相关文章推荐
- HDU 1427 速算24点(dfs)
- [HDU 1427]速算24点(DFS暴搜)
- hdu 1427 速算24点 dfs暴力搜索
- HDU 1427 dfs 速算24点
- HDU 1427 速算24点
- 【HDU 1427 计算24点 DFS】
- HDU 1427 速算24点 枚举+dfs
- hdu 1427速算24点(枚举全排列)
- HDU - 1427 速算24点 (尚未完成)
- (NYOJ 43 24point)&&(HDU 1427 速算24点)
- hdu 1427 速算24点
- hdu 1427 速算24点
- HDU:1427 速算24点
- hdu 1427 速算24点
- HDU-1427 速算24点
- hdu 1427 24点暴力dfs
- hdu 1427 速算24点
- [HDU 1427]速度计算24点(DFS暴力搜索)
- hdu 1427 速算24点(next_permutation 搜索)
- hdoj 1427 速算24点【经典dfs】