用dfs做的,求调
  • 板块P1287 盒子与球
  • 楼主DFTD
  • 当前回复0
  • 已保存回复1
  • 发布时间2024/1/23 23:30
  • 上次更新2024/1/24 10:26:01
查看原帖
用dfs做的,求调
1073330
DFTD楼主2024/1/23 23:30

我的一个思路是用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;
}
2024/1/23 23:30
加载中...