qduoj-36 自然数拆分 (高效深搜)

自然数拆分II 对于大于1的自然数N (N<20) ,可以拆分成若干个大于等于1的自然数之和。 例如,当N=6时, 6=6 6=5+1 6=4+2 6=4+1+1 6=3+3 6=3+2+1 6=3+1+1+1 6=2+2+2 6=2+2+1+1 6=2+1+1+1+1 6=1+1+1+1+1+1 输入 一个大于1的自然数N,N<20 输出 所有的拆分情况.按由大到小的顺序排列。 样例输入 6 样例输出 6 5 1 4 2 4 1 1 3 3 3 2 1 阅读详情

Problem 36: 自然数拆分


Time Limit:1 Ms| Memory Limit:128 MB
Difficulty:2

Description

输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复。

Input

输入只有一个整数n,表示待拆分的自然数n。 n<=80

Output

输出一个数,即所有方案数

Sample Input

7

Sample Output

14

Hint

解释:
输入7,则7拆分的结果是
7=1+6
7=1+1+5
7=1+1+1+4
7=1+1+1+1+3
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
7=1+1+1+2+2
7=1+1+2+3
7=1+2+4
7=1+2+2+2
7=1+3+3
7=2+5
7=2+2+3
7=3+4
一共有14种情况,所以输出14


思路:

       极妙的深搜代码,无重复搜索,一遍完成。


代码:

#include <stdio.h>
#define N 85

int Num, count;

void dfs(int cur, int start)
{
    count ++;
    if(cur == Num){
		return;
	}
    for(int i = start; i < (Num - cur) / 2 + 1; i ++){		// i 最大为(Num - cur)的一半,否则后面的无法做递增,搜索无意义 
		dfs(cur + i, i);
	}
}
  
int main()
{
    count = 0;
    scanf("%d", &Num);
    for(int i = 1; i < Num / 2 + 1; i ++){			// 为避免重复, i 最大为Num的一半 
		dfs(i, i);
	}
    printf("%d\n", count);
  
    return 0;
}
【递归】拆分自然数 题目描述 “天下熙熙,皆为利来;天下攘攘,皆为利往”,监狱里的暗势力划分地盘的目的无非是为了获取利益,他们分配利益的方式是基于这样一个准则:设总利益为自然数N,则任何一个大于1的N,总可以拆分成若干个小于N的自然数之和,求出N的所有拆分后选择最合适的一种进行分配,例如当N=3时,有两种划分,即3=1+2和3=1+1+1。试求出N的所有拆分。 输入 一个整数即N,N<100。 输出 输出每一种... 阅读详情

相关推荐

1318:【例5.3】自然数的拆分

1318:【例5.3】自然数的拆分 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 任何一个大于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...

lybc2019的博客 2140

自然数的拆分

任何一个大于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【输入】 输入n。 【...

weixin_45608039的博客 1538

excel 利用SUBTOTAL函数计算筛选后数列总和、均值、最大、最小值

表里有三个人,咱们需要筛选出三个人,并分别计算他们的总和值。 先看一下数据范围(A1:B27) 通过筛选找张三。 按照上图所示输入函数,选择9,求和。 然后按照函数输入即可。 就能计算出结果。 筛选项选择王五,就会自动计算王五的总和。 筛选到李四就会自动计算李四的总和。 如果把9改成1,就是自动计算筛选出来的均值结果,如下图所示。 如果改成4就是取筛选项的最大值,选择5就是取最小值。 ...

yuanYW7556的博客 3万+

自然数的所有拆分

任何一个大于 1的自然数 n,总可以拆分成若干个小于 n的自然数之和,试求 n的所有拆分。 用不完全归纳法 n =2 可拆分成 2 =1 +1 n =3 可拆分成 3 =1 +2 =1 +1 +1 n =4 可拆分成 4 =1 +3 =1 +1 +2 =1 +1 +1 +1 =2 +2 …… n =7 可拆分成 7 =1 +6

我的E家 2367

matlab电偶极子源码,电偶极子的MATLAB场模拟

电偶极子周围电场电势分布的MATLAB三维模拟Matlab可以用于模拟四维场的效果,本文以电偶极子的电场和电势场为例展示MATLAB在该方面领域的应用。摘要电偶极子由一个正电荷和一个负电荷组成,其电场和空间电势分布与单电荷相比具有一些重要的特性。本文将给出电场和电势场的近似表达式。这两个量的精确表达式是复杂的,不太常用,因此 MATLAB 被采用来操作精确值和绘制三维分布的远区域, 近区域和一侧区...

weixin_35135480的博客 3150

UE5新手必看:3种UI定位方法实战(含蓝图配置截图)

本文为UE5新手详细解析了三种核心UI定位方法:屏幕空间、场景空间和世界空间。通过实战蓝图配置与控件操作,指导开发者如何根据HUD、角色血条、3D物体标记等不同应用场景,正确选择并配置UI的定位方式,以实现清晰的信息传递与沉浸式体验。

weixin_29018815的博客 473

自然数的拆分问题

当然如果n为偶数,可以拆分成n/2+n/2,如果n为奇数,那么就拆分成(n-1)/2+(n+1)/2.不断拆分,可以使用一个数组来记录拆分情况,每一个元素必须大于等于前一个元素。否则继续进行搜索,使用一个for循环,如果当前拆分出来的值比step-1还要小,直接跳过,否则继续进行拆分,并且将该大于step-1的该值放入数组step中,然后再继续递归调用dfs函数。在主函数中输入n,并且从1遍历到n/2,并且将i存入数组a的第一个位置a[0],然后调用dfs函数,开始搜索。a[step]=i;

2302_80194039的博客 851

告别手动复制粘贴:3种高效合并Excel表格的方法对比(含代码)

本文对比了VBA、Power Query和Python三种高效合并Excel表格的方法,并提供了可直接运行的代码。针对不同数据量、更新频率和技术背景,详细分析了各方案的优缺点与适用场景,帮助读者告别低效的手动操作,实现自动化数据整合。

weixin_29057237的博客 442

CCF NOI1077(自然数的拆分问题 )

1077. 自然数的拆分问题 (Standard IO) 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。拆分成的数字相同但顺序不同被看做是相同的方案,如果1+3与3+1被看做是同一种方案。 输入 输入待拆分的自然数n。 输出 如样例...

weixin_34120274的博客 687

涨姿势|小众建模软件Make human,MakeClothes插件使用详解教程(2)

衣服可以从头开始建模,或者通过改变人体网格或由MakeClothes工具提供的“服装助手”(见下文)来建模。在设计和建模一件衣物时,应该记住两个限制。首先,将服装网格映射到人体网格的算法要求服装网格完全由四面体组成。其次,知道MakeClothes每件衣服只支持一种材料是很重要的。 完成MakeClothes工作流程后,您的HOME / makehuman / v1 / data / clothes中的工具将创建一个新文件夹。该文件夹将采用用户为服装项目提供的唯一名称。该文件夹将填充必要的资源,以使该项目在

Crazy_in_3Dmax的博客 1874

YOLO 系列专栏(二十九)YOLO26 × StarNet 轻量化涨点方案(CVPR 2024)轻量化、主干改进篇 | 星星卷积虽小,却蕴藏着巨大的高效潜力

StarNet 出自 CVPR 2024 轻量化主干网络工作,核心创新是,依靠逐元素乘法实现高阶特征融合,在几乎不增加参数量与 FLOPs 的前提下,大幅提升特征表达能力,天然适合等多任务统一建模。本文将 StarNet 完整替换 YOLO26 原有主干,保留 YOLO26 无 NMS 检测头与轻量化结构,实现,并提供。

qq_36130719的博客 410

自然数的拆分(完全背包)

给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复。与“自然数拆分问题”类似,同样需要满足方案的不重复。 所谓拆分方式的重复性判定如下:给定N=a ​1 ​​ +a ​2 ​​ +…a ​m1 ​​ 和 N=b ​1 ​​ +b ​2 ​​ +…b ​m2 ​​ 表示整数N的两种拆分方式。对于∀a ​i ​​ ,b ​j ​​ ≥1,令集合A={a ​i ​​ ∣1≤i≤m ​1 ​​ },B={b ​j ​​ ∣1≤j≤m ​2 ​​ }。若满足集合A=B,则称这两种拆分

qq_15740137的博客 2883

C++经典面试题100例及答案

答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率。答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。答:常对象是指在任何场合都不能对其成员的值进行修改的对象。答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。

usstmiracle的博客 3万+

#2. 自然数的拆分

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和(n

2301_76966569的博客 1133

【参数配置】OpenClaw 的破解之道(Doom Loop)

本文深入解析了OpenClaw中的Doom Loop(死循环)问题及其应对策略。主要内容包括: Agent Loop的核心概念:基于ReAct范式,OpenClaw通过"思考-行动-观察"循环执行任务,但可能陷入无进展的死循环。 Doom Loop现象:Agent持续执行但任务进度为零,常见于四种工具调用场景:相同调用重复执行、调用不存在工具、轮询工具卡死、操作交替振荡。 OpenClaw的防御机制: 第一道防线:重试端断路器,通过上下文压缩熔断(最多3次)和总重试次数熔断(32-160次)防止无限重试。

海兰 4042

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

自然数拆分问题(递归)

#include<stdio.h> int n, top; int line[100]; //我们利用n,保存当前n所剩没有加过的值,然后对当前所剩数进行搜索 void func(int last){//当前操作的数值为last if(n == 0){ if(top==1)return;//objective 3如何利用top判断前面一项把n全用完了的状态?而且,如果第一项n就用完了,根据题意我们应该怎么操作? printf("%d",line[1]);//思考:为什么不直接把l...

liaorongxiao的博客 2326

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

大难题:自然数拆分问题[递归](C++)

题目: Description 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。 Format Input 待拆分的自然数n。 Output 对于数字N,输出每种拆分方式。拆分方式的排序方式为第一个数字小的在前面,如果第一个数字一样,则看第二个数字,以此类推。 Samples 【输入样例】 输入数据 1 7 Copy 输出数据 1 1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+

ytk888的博客 1914

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

自然数的拆分(C++)

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。

WZH_2010的博客 1524

算法竞赛进阶指南:自然数拆分(Python)

给定一个自然数 N,要求把 N 拆分成若干个正整数相加的形式,参与加法运算的数可以重复。注意:求拆分的方案数 mod2147483648 的结果。输入格式一个自然数 N。输出格式输入一个整数,表示结果。数据范围1≤N≤4000输入样例: 输出样例: 题目分析: 完整代码如下 : 很遗憾 测试数据卡了空间 该代码只能过 8/10 个测试点 所以我们考虑优化掉一维空间 注意:i只能循环到N-1(题目要求 : 至少拆分成 2 个数的和。).........

KS的博客 1721

搜索与回溯算法之—自然数的拆分

一、问题描述 任何一个大于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 输入:n 输出:按字典序输出具体方案 输入样例:7 输出样例:

xiaoxi_hahaha的博客 8906

自然数拆分

【问题描述】自然数的拆分:任何一个大于1的自然数N, 总可以拆分成若干个自然数之和,并且有多种拆分方法。试求 n的所有拆分。 例如自然数5,可以有如下一些拆分方法: 5=1+1+1+1+1 5=1+1+1+2 5=1+2+2 5=1+4 5=2+3 注意,本题中N拆分出来的数x的范围是1&lt;=x&lt;N。假如x可以等于N,那么本题和整数划分是一个道理。现在,这里与整数划分这个题的答案只少1...

ywjylm的博客 1万+

自然数无序拆分---递归搜索

美羊羊给喜羊羊和沸羊羊出了一道难题,说谁能先做出来,我就奖励给他我自己做的一样礼物(聪羊羊插嘴:无聊!沸羊羊这下可乐了,于是马上答应立刻做出来,喜羊羊见状,当然也不甘示弱,向沸羊羊发起了挑战(聪羊羊插嘴:一切为了美羊羊啊……一丁点儿奖励你们还挑战啊?可是这道题目有一些难度(聪羊羊插嘴:你当美羊羊的礼物那么好拿啊。),喜羊羊做了一会儿,见沸羊羊也十分头疼,于是就来请教了你。这题的解空间树是一颗n叉树,下面是我画的部分分支,比较抽象,大家凑合着看一下哈哈哈!你要加油帮助喜羊羊哦。一个自然数N(N<=100)。

m0_74995784的博客 265
上一篇: nyoj-130 相同的雪花 (哈希)
下一篇: Java大数类应用
tbl00c
博客等级 码龄13年 21粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值