1 条题解
-
0
Guest
-
2
回溯算法典中典的题,看代码注释
#include<bits/stdc++.h> using namespace std; int ans,n; int a[66]; void print(int num){ cout<<n<<"="; for(int i=0;i<num-1;i++){ cout<<a[i]<<"+"; } cout<<a[num-1]<<'\n'; } void dfs(int left,int last,int ind){//last表示上一个数,保证序列非降 if(left==0){//如果拆完了 ans++; print(ind); return; } for(int i=last;i<=left;i++){ if(i>=n) break;//如果枚举的数比n大,退出 if(left<last) break;//如果超过剩下的数,退出 a[ind]=i;//标记 dfs(left-i,i,ind+1); a[ind]=0;//恢复 } } int main(){ cin>>n; dfs(n,1,0); cout<<ans; }
- 1
信息
- ID
- 823
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者