这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=2068
// Tanky Woo
// HDOJ 2068
#include
using namespace std;
__int64 cuopai[30];
__int64 fun(int a, int b)
{
__int64 result=1;
if(a-b>b)
{
for(int i=a-b+1; i<=a; ++i)
result *= i;
for(int i=1; i<=b; ++i)
result /= i;
}
else
{
for(int i=b+1; i<=a; ++i)
result *= i;
for(int i=1; i<=a-b; ++i)
result /= i;
}
return result;
}
int main()
{
cuopai[1] = 0;
cuopai[2] = 1;
cuopai[3] = 2;
for(int i=4; i<=25; ++i)
cuopai[i] = (i-1)*(cuopai[i-1]+cuopai[i-2]);
int nNum;
while(scanf("%d", &nNum;) && nNum)
{
if(nNum==1 || nNum==2 || nNum==3)
{
printf("1\n");
continue;
}
__int64 sum = 0;
for(int i=2; i<=nNum/2; ++i)
sum += fun(nNum, i)*cuopai[i];
sum += 1;
printf("%I64d\n", sum);
}
}