nyoj 91阶乘之和(不是贪心,搜索而已)

来源:互联网 发布:淘宝介入买家举证流程 编辑:程序博客网 时间:2024/06/08 18:46

阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述

给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;

输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
2910
样例输出
YesNo
这题被规定为贪心,但我第一想法竟是搜索,,那就搜索写了!
 dfs代码:
     
 #include<stdio.h>int a[11];int n,mark;void  dabiao()//打表,求出阶乘的值,题目要求十分弱,到11就行了! {int i,j,sum;for(i=1;i<11;i++) { sum=1; for(j=1;j<=i;j++) { sum*=j;}a[i]=sum; }} void  dfs(int t,int m,int a[]){if(t>10||m>n)//出口 return ;if(m==n){mark=1;return ;}dfs(t+1,m+a[t],a);//加入当前的阶乘值 dfs(t+1,m,a);//不加入 }int main(){int t;dabiao();scanf("%d",&t);while(t--){scanf("%d",&n);mark=0;dfs(1,0,a);if(mark)printf("Yes\n");elseprintf("No\n");}return 0;}         

0 0