1 条题解
-
0
这题有那么难?一看记录那么多大佬都没过应该是数据比较坑深搜拆分即可。
#include <bits/stdc++.h> using namespace std; int n; int a[21]; void dfs(int s,int id){//为确保从小到大,额外添加一个参数记录前一个数字 if (!n){ if (id>2){//注意:“n=n”这种方案不能输出 for (int i=1;i<id;i++){ cout<<a[i]<<' '; } } cout<<endl; return; } for (int i=s;i<=n;i++){//从前一个数字开始拆 n-=i; a[id]=i; dfs(i,id+1); n+=i; } } int main(){ cin>>n; if (n==1){//但有一个很坑的地方:如果n为1,此时应该输出1而不是什么都不输出 cout<<1; return 0; } dfs(1,1); return 0; }
- 1
信息
- ID
- 421
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 4
- 标签
- 递交数
- 40
- 已通过
- 20
- 上传者