标签:
8 1 1 2 4 3 1 4 1 4 2 4 3 4 4 4 5
1 0 9 16 72 96 24 0
组合数学,ans=A(n,m)*C(n,m) n行放k个车,n列也能放k个车,两者摆放则乘以K!
因为做的时候已经结束了,所以借用链接下面的代码
http://blog.csdn.net/u013615904/article/details/49967753
#include<iostream>
#include<cstdio>
#define ULL unsigned long long
using namespace std;
const int maxn=35;
ULL dp[maxn][maxn*maxn];
ULL C(int n,int m)
{
if(n<m) return 0;
ULL ans=1;
for(int i=0;i<m;i++) ans=ans*(ULL)(n-i)/(ULL)(i+1);
return ans;
}
ULL A(int n,int m)
{
if(n<m) return 0;
ULL ans=1;
for(int i=0;i<m;i++) ans*=(ULL)(n-i);
return ans;
}
ULL fuck(int n,int k)
{
if(dp[n][k]) return dp[n][k];
return dp[n][k]=A(n,k)*C(n,k);
}
int main()
{
//freopen("in.txt","r",stdin);
int n,k,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
printf("%I64u\n",fuck(n,k));
//printf("%I64u\n",A(n,k));
//printf("%I64u\n",C(n,k));
}
return 0;
}
湖南工业大学创新实验室2015年新生赛(一)1001(重开)
标签:
原文地址:http://www.cnblogs.com/yinghualuowu/p/5001553.html