c++深搜 ,注释详细
2024-12-26 13:37:55
发布于:陕西
19阅读
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;
}
}
这里空空如也
有帮助,赞一个