GYM 101147 G.The Galactic Olympics(dp)
来源:互联网 发布:马赛克拼图软件 编辑:程序博客网 时间:2024/04/30 16:21
Description
n场不同的比赛,派k个人去,一个人可以参加多场比赛且至少参加一场,每场比赛只能且必须要有一个人参加,问方案数
Input
第一行一整数T表示用例组数,每组用例输入两个整数n和k分别表示比赛数和人数(1<=k<=1e6,1<=n<=1e3)
Output
输出方案数
Sample Input
1
3 2
Sample Output
6
Solution
k>n时显然无解,k<=n时吗,设dp[i][j]表示i场比赛分配给j个人的方案数
j=1时,dp[i][1]=1
j=i时,dp[i][i]=i!
1 < j < i时,dp[i][j]=j*dp[i-1][j-1]+j*dp[i-1][j],第一部分表示如果前i-1场比赛已经分配给了j-1个人,那么第i场比赛必须分配给第j个人,第j个人有j种情况,所以该部分对dp[i][j]的贡献就是j*dp[i-1][j-1];第二部分表示如果前i-1场比赛已经分配给了j个人,那么第i场比赛随便让这j个人中的一个人参加即可,所以这部分对答案的贡献就是j*dp[i-1][j]
Code
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 1111const ll mod=1000000007ll;ll dp[maxn][maxn];void init(){ dp[0][0]=1; for(int i=1;i<=1000;i++) { dp[i][1]=1,dp[i][i]=1ll*i*dp[i-1][i-1]%mod; for(int j=2;j<i;j++)dp[i][j]=1ll*j*(dp[i-1][j-1]+dp[i-1][j])%mod; }}int main(){ freopen("galactic.in","r",stdin); init(); int T,n,k; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); if(k>n)printf("0\n"); else printf("%I64d\n",dp[n][k]); } return 0;}
0 0
- GYM 101147 G.The Galactic Olympics(dp)
- Gym 101147G - The Galactic Olympics
- The Galactic Olympics ///dp
- CF The Galactic Olympics (DP)
- Gym 101572G Galactic Collegiate Programming Contest(离线 树状数组)
- Gym - 100507G G. The Debut Album 数位dp+内存优化
- GYM 101061 G.Repeat it(dp+矩阵快速幂)
- Codeforces Gym 100825 G. Tray Bien (DP)
- GYM 100090 G.The Last Wish(水~)
- GYM 100694 G.The Lost Graph(栈)
- GYM 100694 L.Hanoi Towers and the Progress(dp)
- GYM 101147 H.Commandos(dp)
- Gym 101028G-The Tower of Evil
- CodeForces Gym 100646G The Worm Turns
- Gym 100507G The Debut Album
- The Story of the Olympics 奥林匹克故事
- Codeforces Gym 100379J Move the (p, q)-knight to the corner!(DP+lucas定理)
- 2017-2018 ACM-ICPC, NEERC Problem G Galactic Collegiate Programming Contest(树状数组)
- ACM程序设计题目 Problem B-2
- P1223排队接水
- javaWEB总结(35):其他的servlet监听器
- 二进制中1的个数
- ubuntu下Matlab_Linux添加SVM toolbox
- GYM 101147 G.The Galactic Olympics(dp)
- 使用字节流复制一个文件夹
- Linux块设备驱动(一) _驱动模型
- Android Studio 编译错误整理
- 为Next主题添加多说评论系统
- keras实例
- Chapter01 Java开发入门——JDK的使用
- Retrofit2.0基础用法
- L2-003. 月饼