/*
HDOJ 1521
*/
#include<cstdio>
#include<iostream>
using namespace std;
typedef int LL;
const int N=32768+1;
const int MAX=4;
double c1[N]={0},c2[N]={0}; //注意类型
double fi[N]={0};//存放N!
int n;
void initfi()//记忆化搜索,递归
{
fi[0]=1;
for(int i=1;i<=N;i++)
{
fi[i]=fi[i-1]*i;
}
}
void init()
{
c1[0]=1;
//for(int i=0;i<=N;i++)
//{
// c1[i]=1;
// }
for(int i=1;i<=MAX;i++)
{
for(int j=0;j<=N;j++)//遍历第i组的每一个
{
for(int k=0;j+k<N;k++)//合并到c1,结果存到c2
{
c2[j+k] += c1[k]/fi[j];
}
}
for(int j=0;j<=N;j++)//将c2内容传入c1
{
c1[j]=c2[j];
c2[j]=0;
}
}
}
int main()
{
initfi();
init();
while (~scanf("%d",&n))
{
printf("%.1lf\n",c1[n]*fi[n]);//注意输出时候乘fi[n]
}
return 0;
}
//原理讲解参看:http://blog.csdn.net/agoniangel/article/details/51899372
母函数(指数型)
最新推荐文章于 2023-05-21 12:17:49 发布