T3——拆分自然数

Posted -iris-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T3——拆分自然数相关的知识,希望对你有一定的参考价值。

技术图片

 

 

 

 

 

#include<iostream>
#include<cstdio>
using namespace std;

int a[105];//以数组的的形式记录拆分,便于接下来的搜索与回溯 
bool b[100]={0};
int n;
int tot=0;

void search(int,int);
void print(int);

int main(void)
{
    freopen("Distribution.in","r",stdin);
    freopen("Distribution.out","w",stdout);
    
    scanf("%d",&n);
    search(1,n);
    printf("%d",tot);
}

void print(int g)//输出函数
// 
{
    printf("%d=",n);
    cout<<a[1];
    for(int i=2;i<=g;i++)
        printf("+%d",a[i]);
    cout<<
;
}
void search(int x,int y)//search表示我们在小于 y 的范围内选取第 x 个数字
//选取数字规则按照字典序
//所以我们优先选小的数字 每个数字必须小于或者等于前一个数字 
//依次递归可得
//当我们选取当前数字之后将y的范围缩小防止
//以后与我们之前选择的数列重复
//之后输出方案数++ 
{
    for(int i=1;i<=n;i++)
    {
        if(i==n) break;
        if(i>=a[x-1]&&i<=y) 
        {
            a[x]=i;
            if(y-i==0) print(x),tot++/*Copy(x,tot)*/;
            else search(x+1,y-i);
        }
    }
}

 

 

-end-

 

以上是关于T3——拆分自然数的主要内容,如果未能解决你的问题,请参考以下文章

自然数的拆分(DFS)

Acwing-279-自然数拆分(背包)

水平拆分

为啥将拆分为 wav 文件的旋律转换为拆分的 mp3 会在片段边界处产生不好的声音?

pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”

递归拆分自然数