当时要上课去。。。没来得及做编程题。。。看完题目想了一下觉得不做亏了,有点简单
题目大概是说给一个target数值,从x=0开始,2号可以生成2*x+1,3号生成2*x+2,输出最终能生成target的顺序
比如10,输出233
其实解空间就是一个递归树,不行就回溯回去就好了
自然就是dfs,代码如下
vector<int> ans;
int target;
void dfs(int x){
if(x==target){
for(int i=0;i<ans.size();++i){
cout<<ans[i];
}
return ;
}
if(x>target) return;
ans.push_back(2);
dfs(2*x+1);
ans.pop_back();
ans.push_back(3);
dfs(2*x+2);
ans.pop_back();
}
int main(){
cin>>target;
dfs(0);
return 0;
}
可能有点问题,比如dfs要不要for循环包起来 具体题目我也忘了
好像是输出最少次数,应该不用for循环遍历包起dfs