解题思路:先用dfs将可行的排队顺序总数找出,然后再算出小朋友排队的总数
如样例
我们用dfs找出可行的排列顺序为(0为1元的小朋友,1为2元的小朋友)
0011
0101
两种排队顺序
然后将小朋友放入:
第一个1元小朋友有C12 种方法排队第二有C11
2元小朋友同理
最后答案为
可行的排队顺序(ans)乘上小朋友们的排队方法
ans*(1元小朋友们的方法)*(2元小朋友们的方法)
注意事项:
参考代码:
#include<bits/stdc++.h> using namespace std; int m,n,k; int ans=0; void dfs(int i,int j,int z) { if(i==m) { ans++; return; } if(j<n) { //cout<<i<<' '<<j<<' '<<z<<endl; dfs(i+1,j+1,z); } if(j>z&&z<k) { //cout<<i<<' '<<j<<' '<<z<<endl; dfs(i+1,j,z+1); } } int main() { cin>>m>>n>>k; dfs(0,0,0); for(int i=1;i<=n;i++) { ans*=i; } for(int i=1;i<=k;i++) { ans*=i; } cout<<ans; return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:609 |
A+B for Input-Output Practice (C语言代码)浏览:468 |
1124题解浏览:595 |
出圈】指针malloc版浏览:355 |
敲七 (C语言代码)浏览:2701 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:403 |
字符删除 (C语言代码)浏览:721 |
母牛的故事 (C语言代码)浏览:455 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:700 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:437 |