本文主要是介绍HDU1427 24点问题(DFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:
算24点,可以加括号
思路:
补一下之前的基础东西
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 2e3 + 7;char s[10];
int a[10];
int ans;
int flag;void dfs(int now,int sum,int cur) {if(flag) return;if(now == 4) {if(sum + cur == 24) flag = 1;if(sum - cur == 24) flag = 1;if(sum * cur == 24) flag = 1;if(cur != 0 && sum % cur == 0 && sum / cur == 24) flag = 1;return;}//先算前面一部分dfs(now + 1,sum - cur,a[now]);dfs(now + 1,sum + cur,a[now]);dfs(now + 1,sum * cur,a[now]);if(cur != 0 && sum % cur == 0)dfs(now + 1,sum / cur,a[now]);//算后一部分,相当于给cur和a[now]的运算加括号dfs(now + 1,sum,cur - a[now]);dfs(now + 1,sum,cur + a[now]);dfs(now + 1,sum,cur * a[now]);if(a[now] != 0 && cur % a[now] == 0)dfs(now + 1,sum,cur / a[now]);
}int trans(char*str) {if(strlen(str) > 1) return 10;if(str[0] == 'A') return 1;if(str[0] == 'J') return 11;if(str[0] == 'Q') return 12;if(str[0] == 'K') return 13;return str[0] - '0';
}int main() {while(~scanf("%s",s)) {a[0] = trans(s);for(int i = 1;i < 4;i++) {scanf("%s",s);a[i] = trans(s);}sort(a,a + 4);flag = 0;do {dfs(2,a[0],a[1]);if(flag) break;}while(next_permutation(a,a + 4));if(flag) printf("Yes\n");else printf("No\n");}return 0;
}
这篇关于HDU1427 24点问题(DFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!