c++深搜 ,注释详细
2024-12-26 13:37:55
发布于:陕西
62阅读
0回复
0点赞
【深搜】
递归搜索盘子的使用情况,建立如下递归搜索树

【代码如下】
记录上一个盘子的苹果数,本次放置的苹果不小于上一个。保证不重复
#include<bits/stdc++.h>
using namespace std;
int t,m,n;
int ans;
vector<int> vt;
void dfs(int x,int last){ // x是当前的和, last是上一个数字
	if(vt.size()==n){ // 盘子用完了
		// for(int i=0;i<vt.size();i++) cout<<vt[i]<<" ";
		// cout<<"---"<<x<<endl;
		if(x==m){ // 苹果放完
			ans++;
		}
		return;
	}
	for(int i=0;i<=m;i++){
		if(vt.size()<n && x+i<=m && last<=i){ // 盘子有空余,剩余的苹果数大于i,上一个盘子的苹果数不大于本次要放的(保证不重复)
			vt.push_back(i); // 把这i个苹果放入盘子
			dfs(x+i,i);
			vt.pop_back(); // 回溯,把最后一个盘子清空
		}
	}
}
int main(){                 
    cin>>t;
    while(t--){             
        ans=0;
        cin>>m>>n;
        dfs(0,0);         
        cout<<ans<<endl;
    }
}
全部评论 4
nb
2025-08-06 来自 四川
0nb
2025-08-06 来自 四川
0nb
2025-08-06 来自 浙江
0👍
2025-07-12 来自 辽宁
0

















有帮助,赞一个