我的一个思路是用dfs,枚举第一个盒子放球的数量,它肯定是不能超过r的,然后放了之后再递归,然后它球的种类是有n种的,所以就要乘组合数,不知道哪里出问题了,求调
ans就是答案数,然后方便之后乘组合数
sum就是最后的和
#include <bits/stdc++.h>
using namespace std;
int n,r,ans=0,sum=0;
int js(int a){
if(a==1){
return 1;
}
return a*js(a-1);
}
int zuhe(int shang,int xia){
return js(xia)/(js(shang)*js(xia-shang));
}
void dfs(int n,int r){
if(r==1){
ans++;
for(int i=1;i<=r;i++){
sum+=ans*zuhe(n-i,r);
ans=0;
}
return;
}
for(int i=1;i<=r;i++){
dfs(n-i,r-1);
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>r;
dfs(n,r);
cout<<sum<<endl;
return 0;
}