半数集问题

  给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:

  (1)   n ∈set(n);

  (2) 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;

  (3) 按此规则进行处理,直到不能再添加自然数为止。

  以6为例子,6,6前面可以加1,2,3生成16,26,36,26前面可以加1生成126,同理36生成136.所以6的半数集元素个数为6分别是6,16,26,36,126,136

  以12为例子,只加一个数字产生的元素有612,512,412,312,212,112。因为之后加的数字与‘12’没有关系,只与第一次加的数字有关,612,512,412,312,212,112产生的半数集元素的个数相当于6,5,4,3,2,1的半数集的个数,不难得到如下公式。

  

递归代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>using namespace std;int f(int n){if(n==1)return 1;else{int ans=1;for(int i=1;i<=n/2;i++){ans=ans+f(i);}return ans;}
}int main()
{int n;scanf("%d",&n);int num=f(n);printf("%d\n",num);return 0;
}

  递归时间复杂度很高对此我们可以进行优化,用数组空间存储之前的状态

O(n2)实现:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>using namespace std;int main()
{int n;scanf("%d",&n);int a[100];a[1]=1;for(int i=2;i<=n;i++){a[i]=1;for(int j=1;j<=i/2;j++){a[i]+=a[j];}}printf("%d\n",a[n]);return 0;
}

  仔细分析后,发现时间复杂度其实可以降到O(n),因为当n为奇数时,第n项的半数集个数等于第n-1项的半数集个数,当n为偶数时,第n项的半数集个数等于第n-1项半数集个数 加 第n/2项半数集个数。

O(n)实现:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>using namespace std;int main()
{int n;scanf("%d",&n);int a[100];a[0]=a[1]=1;for(int i=2;i<=n;i++){if(i%2!=0)a[i]=a[i-1];else{a[i]=a[i-1]+a[i/2];}}printf("%d\n",a[n]);return 0;
}

  

转载于:https://www.cnblogs.com/wz-archer/p/10603424.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微型计算机控制理论基础答案,微型计算机控制技术试卷c

微型计算机控制技术试卷a潘新民 微型计算机控制技术实用教程微型计算机控制技术试卷C一、选择题(本题共10小题&#xff0c;每小题 1.5分&#xff0c;共15分)1. DAC0832的VREF接-5V&#xff0c;IOUT1接运算放大器异名端&#xff0c;输入为1000000B &#xff0c;输出为( )。A. 5V…

aws lambda_四处奔走:初学者遇到AWS Lambda

aws lambdaby Janaka Bandara通过Janaka Bandara 四处奔走&#xff1a;初学者遇到AWS Lambda (Running around the block: a beginner meets AWS Lambda) Computing! It sure has a very long, vivid (and sometimes awkward) history. Some key milestones include:计算&…

python打开快捷方式_Python创建启动目录的快捷方式,python,到

# -*- coding:utf-8 -*-# author&#xff1a;lizonezhiimport osimport sysimport pythoncomimport win32com.client as clientdef createShortCut(filename): # 目前创建的无起始位置"""filename should be abspath, or there will be some strange errors&quo…

二叉树的基本操作及应用(三)

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> typedef char DataType; int depth0; int h11; int nlayer1; char ch2; typedef struct node {DataType data;//节点数据元素struct node *lchild;//指向左孩子struc…

maven的profile详解

详细内容请见&#xff1a;https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能让你为一个特殊的环境自定义一个特殊的构建&#xff1b;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置&#xff0c;可以用来设置或者覆盖配置默认值。有…

夏至未至计算机版音乐,夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总...

夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总夏至未至第一集插曲是什么?夏至未至插曲曝光。夏至未至是由陈学冬、郑爽、白敬亭等联袂主演的青春偶像剧,昨晚已经开播了&#xff0c;那么第一集的插曲是什么呢?和小编一起去看看吧!夏至未至第一集插曲《那些花儿》那片笑…

了解如何在20分钟内创建您的第一个Angular应用

Angular is a JavaScript framework, created my Misko Hevery and maintained by Google. It’s an MVC (Model View Vontroller). You can visit the official page to learn more about it.Angular是一个JavaScript框架&#xff0c;创建了我的Misko Hevery&#xff0c;并由G…

js闭包使用

闭包就是在一个函数内定义一个内部函数 并返回内部函数 function f1(){var a1; addfunction(){aa1;} function f1Sub(){ console.log(a); } return f1Sub; } var ff1();f();add();f();var f2f1();add();f(); 输出为 1 2 2 可以看到输出结果 定义f2后执行add 这时 f2的add函数已…

BIO,NIO,AIO总结(二)

这里重点介绍NIO 待定 http://www.apigo.cn/2018/11/09/javacore5/ https://juejin.im/entry/598da7d16fb9a03c42431ed3 https://mp.weixin.qq.com/s/c9tkrokcDQR375kiwCeV9w?转载于:https://www.cnblogs.com/smallJunJun/p/10607078.html

思科配置计算机ip地址子网掩码,计算机系统与网络技术IP地址 子网掩码 主机号等计算复习...

IP地址 子网掩码 主机号等计算复习IP地址、子网掩码、网络号、主机号、网络地址、主机地址复习 IP地址&#xff1a;4段十进制&#xff0c;共32位二进制&#xff0c;如&#xff1a;192.168.1.1 二进制就是&#xff1a;11000000&#xff5c;10101000&#xff5c;00000001&#xf…

nmap常用参数详解

nmap常用参数详解 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 借用英雄联盟的一个英雄赵信的一句话&#xff1a;“即使敌众我寡,末将亦能万军丛中取敌将首级!”。三国关羽&#xff0c;万军丛中斩了颜良&#x…

r语言r-shiny_使用Shiny和R构建您的第一个Web应用程序仪表板

r语言r-shinyby AMR通过AMR 使用Shiny和R构建您的第一个Web应用程序仪表板 (Build your first web app dashboard using Shiny and R) One of the beautiful gifts that R has (that Python missed,until dash) is Shiny. Shiny is an R package that makes it easy to build …

RHEL5.8配置开机自动挂载磁盘

Linux环境中可以通过fstab来设置自动挂载磁盘或者共享存储&#xff0c;操作如下&#xff1a; fstab配置文件路径&#xff1a;/etc/fstab 每行代表一个存储位置。 [rootappsrv01 ~]# cat /etc/fstab LABEL/ / ext3 defaults 1…

909计算机基础大纲,《计算机应用基础》(专科)考试大纲

《计算机应用基础》(专科)考试大纲《计算机应用基础》考试大纲考试对象&#xff1a;《计算机应用基础》考试大纲适用于网络教育所有专业的高中起点专科学生。 考试教材&#xff1a;《全国计算机等级考试一级MS Office教程》(2004版)&#xff0c;南开大学出版社 课程学时&#x…

模板变量,过滤器和静态文件引用

模板变量&#xff0c;过滤器和静态文件引用 模板路径 Djiango先到settings里面找templates下的DIRS查看是否有路径&#xff0c;也是从上往下依次寻找&#xff0c;找到就返回。如果DIRS没有&#xff0c;就到APP_DIRS里面寻找。但是APP要先在INSTALLED_APPS里面进行注册然后根据I…

antd option宽度自适应_WordPress文章中添加自适应宽度的表格——墨涩网

WordPress文章中添加自适应表格&#xff0c;前面写文章的时候需要用到表格来表达阵列信息&#xff0c;但是在WordPress添加表格不想是在office中那样方便&#xff0c;需要借助插件或者代码才可以实现&#xff0c;今天分享一个不需要安装插件纯代码实现WordPress文章中添加自适应…

Go语言程序记录日志

许多软件系统运行中需要日志文件。Go语言程序中&#xff0c;输出日志需要使用包"log"&#xff0c;编写程序十分简单。 像Java语言程序&#xff0c;输出日志时&#xff0c;往往需要使用开源的软件包来实现&#xff0c;编写程序稍微复杂一些。 Go语言的包"log&quo…

如何让代码更易于维护_如何轻松地使您的网站更易于访问

如何让代码更易于维护by Jaroslav Vaňkt通过JaroslavVaňkt 如何轻松地使您的网站更易于访问 (How you can easily make your website more accessible) As a designer, developer, or even product manager, you have thousands of responsibilities. Every project require…

计算机安全概论论文,计算机安全探讨论文毕业论文(7篇).doc

计算机安全探讨论文毕业论文(7篇)计算机安全探讨论文毕业论文(7篇)计算机安全探讨论文毕业论文(7篇)预读: 第一篇:终端计算机安全检查技术研究【摘要】信息安全保密管理工作的重点和计算机终端检查的难点,促进了计算机安全检查技术的发展.本文回顾了终端检查技术经历的三个阶段…

OO第一单元总结

OO第一单元总结 第一次作业总结 这是我第一次接触Java和面向对象思想&#xff0c;最一开始&#xff0c;我建立了简单的类和对象的概念&#xff0c;多亏了第一次作业难度和复杂度较低&#xff0c;我才没有崩掉hhh。 第一次作业我只分了三个类&#xff0c;一个main&#xff0c;一…