1082. Easy to AC

10175101159

怎么大家都用dfs= =
贴个数学上的解法
代码是很早写的,风格再丑也不改了

注意到当n>2时,(n+1)!=(n+1)×n!>n×n!>sigma(i=1,n)i!
这表明,若a满足n!≤a<(n+1)!,n>2且a不能表为以n!为加数的和式
则a必然无法表为其他任何和式

#include<iostream>
using namespace std;
long long n;
long long a[10]={1,1};
int i;
int main()
{
    for(i=2;i<10;++i)a[i]=i*a[i-1];
    while(cin>>n){
        if(n<0)return 0;
        if(n==0){cout<<"NO\n";continue;}
        for(i=9;i>2;--i)if(n>=a[i])n-=a[i];
        n<5? cout<<"YES\n":cout<<"NO\n";
    }
    return 0;
}
candice

大佬啊

╮ 潜心 ╰

二进制法取子集 0要特判
因为这个wa了10法…… =。=
惨痛的教训

Andrew-Malcom
#include

using namespace std;

long long int noe(int a)

{

long long int i=1,s=1;
for(i=1;i<=a;i++){
    s=s*i;
}
return s;

}

vectornum {1,noe(1),noe(2),noe(3),noe(4),noe(5),noe(6),noe(7),noe(8),noe(9),noe(10)};

int main()

{

int n;
while(cin>>n)
{
    if(n<0) break;
    else{
        if(n==0) cout<<"NO"<<endl;
        else if(n==1) cout<<"YES"<<endl;
        else if(n==2) cout<<"YES"<<endl;
        else{
            int i,j,k=n;
            for(i=9;i>=0;i--){
                if(num[i]<=k) k-=num[i];
            }
            if(k==0) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
    }
}
return 0;

}

你当前正在回复 博客/题目
存在问题!