您的位置:首页 > 其它

poj 1775 Sum of Factorials

2010-10-17 11:11 393 查看
题意:判断一个数是否能够被表示为多个数阶乘的和。

例如:9 = 1!+2!+3!。但是并不要求阶乘是连续的。比如7 = 1!+3!7也满足条件。

思路:这道题目都可以用0,1背包来做,首先最多使用到10!,然后把1到10的阶乘的和都打表了。

但是这里从discuss里面得到了一个更好的算法,因为1!+2!+3!<4!,这情况的成立,

所以如果这个数能够表示成为多个数的阶乘,那么我们可以转换为这个数减去他能减掉的最大的阶乘的数是否能被表示。

详细的思路看代码:

#include <stdio.h>
int main()
{
int a[12];
int i;
int n;
a[0]=1;
for(i=1;i<=10;i++)
a[i]=i*a[i-1];
while(scanf("%d",&n)&&n>=0)
{
if(n==0)
{
printf("NO/n");
continue;
}
for(i=10;i>=0;i--)
{
if(n>=a[i])
n-=a[i];
}
if(n==0)
printf("YES/n");
else
printf("NO/n");

}
return 0;
}


这思路也算是神一般的思路了。。佩服想出这算法的人。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: