1 条题解
-
0
思路
本题目有多种解法。
- 首先, 总共只有 个,对于每一个的答案又唯一,所以可以打表。
- 我们还可以用 层循环来暴力枚举。
- 正解:dfs搜索,我们设
dfs(x,dep)
为当前要拆分 ,对于 来说当前正在拆分第 个数。然后我们需要考虑如何使其不重复,我们每次开始枚举时都从上一个数开始枚举,这样就只会从小到大枚举了。
AC Code
法一:打表
代码来源于洛谷。
#include<iostream> #include<cstdio> using namespace std; int n; int main() { cin>>n; if(n==1)printf("\n"); else if(n==2)printf("1+1\n"); else if(n==3)printf("1+1+1\n1+2\n"); else if(n==4)printf("1+1+1+1\n1+1+2\n1+3\n2+2\n"); else if(n==5)printf("1+1+1+1+1\n1+1+1+2\n1+1+3\n1+2+2\n1+4\n2+3\n"); else if(n==6)printf("1+1+1+1+1+1\n1+1+1+1+2\n1+1+1+3\n1+1+2+2\n1+1+4\n1+2+3\n1+5\n2+2+2\n2+4\n3+3\n"); else if(n==7)printf("1+1+1+1+1+1+1\n1+1+1+1+1+2\n1+1+1+1+3\n1+1+1+2+2\n1+1+1+4\n1+1+2+3\n1+1+5\n1+2+2+2\n1+2+4\n1+3+3\n1+6\n2+2+3\n2+5\n3+4\n"); else printf("1+1+1+1+1+1+1+1\n1+1+1+1+1+1+2\n1+1+1+1+1+3\n1+1+1+1+2+2\n1+1+1+1+4\n1+1+1+2+3\n1+1+1+5\n1+1+2+2+2\n1+1+2+4\n1+1+3+3\n1+1+6\n1+2+2+3\n1+2+5\n1+3+4\n1+7\n2+2+2+2\n2+2+4\n2+3+3\n2+6\n3+5\n4+4\n"); return 0; }
法二:暴力循环
#include<bits/stdc++.h> #define ll long long #define db double using namespace std; ll n; int main(){ cin>>n; for(ll a=1;a<9;a++){ for(ll b=a;b<9;b++){ if(a+b==n) printf("%d+%d\n",a,b); for(ll c=b;c<9;c++){ if(a+b+c==n) printf("%d+%d+%d\n",a,b,c); for(ll d=c;d<9;d++){ if(a+b+c+d==n) printf("%d+%d+%d+%d\n",a,b,c,d); for(ll e=d;e<9;e++){ if(a+b+c+d+e==n) printf("%d+%d+%d+%d+%d\n",a,b,c,d,e); for(ll f=e;f<9;f++){ if(a+b+c+d+e+f==n) printf("%d+%d+%d+%d+%d+%d\n",a,b,c,d,e,f); for(ll g=f;g<9;g++){ if(a+b+c+d+e+f+g==n) printf("%d+%d+%d+%d+%d+%d+%d\n",a,b,c,d,e,f,g); for(ll h=g;h<9;h++){ if(a+b+c+d+e+f+g+h==n) printf("%d+%d+%d+%d+%d+%d+%d+%d\n",a,b,c,e,f,g,h); } } } } } } } } return 0; }
法三(正解):深搜dfs
#include<bits/stdc++.h> #define ll long long using namespace std; const ll N=10; ll n,a[N]; void dfs(ll x,ll dep){ if(x==0){ if(dep==2) return; for(ll i=1;i<dep;i++) printf("%lld%c",a[i],i==dep-1?'\n':'+'); return; } for(ll i=a[dep-1];i<=x;i++){ a[dep]=i; dfs(x-i,dep+1); } } int main(){ scanf("%lld",&n); a[0]=1; dfs(n,1); return 0; }
- 1
信息
- ID
- 744
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 90
- 已通过
- 52
- 上传者