HDU2048 HDU2049 组合数系列 错排
HDU1465
HDU2048
HDU2049
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<cmath>
using namespace std;
long long s[21],c[21];
void _gets()
{
s[0]=0;s[1]=0;s[2]=1;
for(i=3;i<=20;i++)
s[i]=(i-1)*(s[i-1]+s[i-2]);
}
void _getc()
{
c[1]=1;
for(i=2;i<=20;i++)
c[i]=c[i-1]*i;
}
int main()
{
int i,n,m;
_gets();
_getc();
cin>>n;
while(n--){
cin>>m;
printf("%.2lf%%\n",(double)s[m]/c[m]*100.00);
}
return 0;
}
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<algorithm>
#include<cmath>
using namespace std;
long long s[60],c[60][60];
void _gets()
{
s[0]=0;s[1]=0;s[2]=1;
for(int i=3;i<=20;i++)
s[i]=(i-1)*(s[i-1]+s[i-2]);
}
void _getc()
{
for(int i=1;i<=20;i++){
c[i][0]=1;
for(int j=1;j<=i;j++)
c[i][j]=c[i][j-1]*(i-j+1)/j;
}
}
int main()
{
int n,T,m;
s[1]=0;s[2]=1;
_gets();
_getc();
cin>>T;
while(T--){
cin>>n>>m;
long long ans=c[n][m];
ans*=s[m];
cout<<ans<<endl;
}
return 0;
}
It is your time to fight!