今天我们来看#T1318. 【例5.3】自然数的拆分
注:特别鸣谢作者小王子y的文章带来的灵感!
原文链接:1318:【例5.3】自然数的拆分_1318:【例5.3】自然数的拆分_小王子y的博客-CSDN博客废话不多说,直接上代........................题目
#T1318. 【例5.3】自然数的拆分
- 传统题1000ms128MiB
题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
Copy
输入
输入n。
输出
按字典序输出具体的方案。
样例
输入数据 1
7
Copy
输出数据 1
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
输出数据少了一个
7=3+4
补上
现在上代码:
#include<bits/stdc++.h>
#define N 3000
using namespace std;
int n,r;
int a[N];
void print(int step){
cout<<n<<"=";
for(int i=1;i<=step-1;i++){
cout<<a[i]<<"+";
}
cout<<a[step]<<endl;
}
void dfs(int sum,int step){
for(int i=a[step-1];i<=sum;i++){
if(i<n){
a[step]=i;
sum-=i;
if(sum==0){
print(step);
}
else{
dfs(sum,step+1);
}
sum+=i;
}
}
}
int main(){
cin>>n;
a[0]=1;
dfs(n,1);
return 0;
}
一圈三联求个光柱
我是黑子