题解 | Sum of Factorials
Sum of Factorials
https://www.nowcoder.com/practice/42cb1c7f7344466b8cb1710cb12d06b1
//因为10的阶乘就已经很大了,所以阶乘能选的数字很少
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
//还有个0的阶乘别忘了所以有两个1可以用
int a[] = {1,1, 2, 6,42,1806,3263442};//存下所有阶乘之后开始暴搜
bool visit[8];
bool dfs(int sum, int aim) {
if (sum > aim)return false;
if (sum == aim)return true;
bool isfind = false;//代表当层是否有答案
for (int i = 0; i < 6; i++) {
if (!visit[i]) {
//该阶乘没有被选过
visit[i] = true;
if (dfs(sum + a[i], aim)) {
//找到结果
isfind = true;
}
visit[i] = false;
}
}
return isfind;
}
int main()
{
// long long n=1;
// while(n<1e9){
// cout<<n<<',';
// n*=(n+1);
// }
int n;
while (cin >> n) {
if (n < 0)break;
if (dfs(0, n))puts("YES");
else puts("NO");
}
}
