[递推]销售

匿名 (未验证) 提交于 2019-12-02 23:47:01

问题 G: 销售



[提交] [״̬] [命题人:admin]

题目描述

农夫 John 正在筹划从他的谷仓中售出 N 头奶牛,与此同时也有 N 个农夫想要购买奶牛。每个农夫都有刚好足够购买一头奶牛的钱并且将会把买来的这头奶牛用来挤奶。为了减少买来的牛挤不出奶的风险,农夫们每个人都将会购买两头不同的奶牛各自一半的产权,然后将获得每头牛产奶量的一半。
如果将两种方案中每个农夫都购买了相同的奶牛看作是相同的销售方案。那么农夫 John 一共有多少种不同的销售方案呢?

输入

第一行包含一个整数t ≤ 100,为数据的组数。接下来t行每行包含一个整数N ≤ 2000作为输入数据。

输出

样例输入

3 1 2 3 

样例输出

0 1 6 

提示

对于50%的数据,N≤20,
对于100%的数据,N≤2000.

f[i]=C(n,2)*C(2,1)*f[i-1];
f[i]=C(n,2)*(n-1)*f[i-2];
AC代码:
#include <bits/stdc++.h>  using namespace std; typedef long long ll; const int mod=1e7+7; ll f[2005]; void init() {     f[2]=1;     for(ll i=3;i<=2000;i++)     {         f[i]=(i*(i-1)*f[i-1]%mod+i*(i-1)/2*(i-1)*f[i-2]%mod)%mod;     } } int main() {     init();     int t;cin>>t;     while(t--)     {         int x;         scanf("%d",&x);         cout<<f[x]<<endl;     }     return 0; }
View Code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!