题目描述

我们要求找出具有下列性质数的个数(包含输入的自然数n):

先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:

1.不作任何处理;

2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;

3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.

输入格式

1个自然数n(n≤1000)

输出格式

11个整数,表示具有该性质数的个数。

输入输出样例

输入

6

输出

6

(说明/提示:满足条件的数为:6,16,26,126,36,136) 

我的分析

 初看此题,顿觉简单:不就是递归嘛,穷举所有情况不就完了吗,岂能难得住我?( ̄▽ ̄)



 说时迟那是快,我三下五除二地便写出如下解法:

#include<iostream>
using namespace std;
int func(int n){
int count=0;
for(int i=1;i<=n/2;++i){//枚举该数左边可能的相邻数
count += 1+fun(i);//仍是两种情况:左边无数/左边有数
}
return count;
}
int main(){
int n;
cin>>n;
int count=0;
count=1+func(n); //两种情况:左边无数/左边有数
cout<<count<<endl;
return 0;
}

 然后我信心满满地等待着AC结果,然而却显示——





 ◢▆▅▄▃ 崩╰(〒皿〒)╯潰 ▃▄▅▆◣大部分case都没有过,我感觉收到了此题极大的羞辱!

 于是,我不得不思考更高效的解法。如上所示,之前采取的递归的思路是自上而下:我们从原数开始逐步向左推进,分析该数左边可能出现的的所有数字排列。我灵机一动,不妨换一个思路,自下而上,从 1 分析起走,如数字 1 只有 1 种情况,就是 1 本身;数字 22 种情况: 2,12 ;数字 32 种情况: 3,13 ;数字 44 种情况: 4,24,14,124 …我们不难发现,前面的情况其实可以划归为后面出现的情况的子问题,如 12=1+2,124=12+4 等等,这也就是动态规划的基本思想:将复杂问题划归为简单的子问题,最终由基准情形逐步推导出所有情形。如果我们用 dp[i] 表示由数字 i 推导出的的所有满足性质的数的数量,那么有如下递推关系式:

dp[1]=1

dp[2]=1+dp[1]=2

dp[3]=1+dp[1]=2

dp[4]=1+dp[2]+dp[1]=4

dp[5]=1+dp[2]+dp[1]=4

dp[6]=1+dp[3]+dp[2]+dp[1]=6



dp[i]=1+dp[1,2,3,…,j] (j=i/2)

 找准了基准情形: i=1 ,列出了递推式:dp[i]=1+dp[1,2,3,…,j] (j=i/2),那么动态规划的题目就迎刃而解啦。(ノ≧∀≦)ノ

该题的最终代码非常简洁,只有以下几行:

#include<iostream>
using namespace std;
int main(){
int n; //原数
cin>>n;
int dp[n+1]; //dp数组记录每种子问题的情况数
for(int i=1;i<=n;i++){//迭代以1-n结尾的每一个子问题
dp[i]=1; //只有该数自己本身算1种情形
for(int j=i/2;j>=1;j--){
dp[i] += dp[j]; //加上子问题的情形数
}
}
cout<<dp[n]<<endl;
return 0;
}

 现在所有情况都能AC啦!





以后暴力求解时一定要三思而后行了…

洛谷P1028.数的计算(动态规划)的更多相关文章

  1. 洛谷 P1028 数的计算【递推】

    P1028 数的计算 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在它 ...

  2. 洛谷P1028 数的计算 题解 动态规划入门题

    题目链接:https://www.luogu.com.cn/problem/P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 \(n\) ): 先输入一个自然数 \(n(n \ ...

  3. 洛谷P1028数的计算

    https://www.luogu.org/problemnew/show/P1028 只用递归会超时,需要用递归型动规,用一个数组保存已经算过的值,避免重复计算. 求数字为n的方案数的最优子结构为: ...

  4. 洛谷 P1028 数的计算

    嗯... 首先这道题想到的就是递推.... 但是递推失败 (不知道自己是怎么想的 然后又想打一个暴力,但是数的最高位太难存储了,所以又放弃了(并且好像这个暴力大约500就会炸... 然后看了题解,才发 ...

  5. 洛谷--P1028 数的计算(递推)

    题意:链接:https://www.luogu.org/problem/P1028 先输入一个自然数n (n≤1000) , 然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自 ...

  6. (递推)codeVs1011 && 洛谷P1028 数的计算

    题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.          不 ...

  7. 洛谷P1028 数的计算

    https://www.luogu.org/problem/P1028 #include<cstdio> using namespace std; int main(){ ,i,f[]; ...

  8. (Java实现) 洛谷 P1028 数的计算

    题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数nn): 先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能 ...

  9. Java实现 洛谷 P1028 数的计算

    import java.util.Scanner; import java.util.Arrays; public class Main { private static Scanner cin; p ...

随机推荐

  1. 工作用不到,面试经常问,这么头疼的Spring,怎么能快速过关

    目录 这次文章很简单,但是也不简单,spring,spring的IOC和AOP,不知道你掌握的怎么样,最近身边的朋友有木有去面试的?他们被问到的spring面试题你能回答吗? 一看这张图,可能有朋友会 ...

  2. 视图相关SQL

    前面介绍了视图的概念和作用,接下来简单的用实例SQL来展现视图. 例如:首先,创建表e_information.表e_shareholder: 然后插入表数据等,在此,这简单的部分我就省略了,直接写视 ...

  3. 面试时谈得很好,为什么就是拿不到offer?

    招聘行业有个共识,那就是如果没有给通知一般就是没有通过, 有的学员会问,为什么不打电话通知一下呢? 我猜测,有一方面的原因是怕尴尬,虽然你不觉得尴尬,但是难保有的应聘者会情绪激动,问东问西. 比如你告 ...

  4. jmeter接口测试 -- Base64加密(函数助手添加自定义函数)

    图片转码 base64 致谢参考博客: https://www.cnblogs.com/qiaoyeye/p/7218770.html https://www.cnblogs.com/lasdaybg ...

  5. 【Logisim实验】构建立即数-随机存储器-寄存器的传送

    关于Logisim Logisim在仿真软件行列中算是比较直观的软件了,它能做的事情有很多,唯一不足的是硬件描述语言的支持,总体上来说适合比较底层的仿真,依赖于Hex值,通过线路逻辑设计能够较好的 关 ...

  6. 使用opencv为没有透明通道的图像加入透明通道

    在图像处理中,我们经常需要处理带透明通道的图片,比如为图片或视频添加水印,为图片或视频添加字幕.贴图等.然而,我们的素材图片未必总是带有透明通道.比如,素材的背景本该透明的地方,却是黑色和白色.有时, ...

  7. PHP pi() 函数

    实例 返回圆周率 PI 的值: <?phpecho(pi());?>高佣联盟 www.cgewang.com 定义和用法 pi() 函数返回圆周率 PI 的值. 提示:命名常量 M_PI ...

  8. bzoj 3790 神奇项链 回文串 manacher|PAM

    LINK:神奇项链 存在两个操作:1. 一个操作可以生成所有形式的回文串 2.一个操作可以将两个串给合并起来 如果前缀和后缀相同还可以将其并起来. 多组询问 每次询问合成一个串所需最少多少次2操作. ...

  9. Linux的VMWare中Centos7文件查找(find-grep)和vim文本编辑器基操

    一.find文件查找 grep 匹配字段 文件名 ——筛选文件   find查找 语法参数示例 格式: find 查找范围 查找类型 参数   find / -name *.conf   按文件名查找 ...

  10. PHP代码混淆与加密——php screw plus

    php是一个开源的.广受欢迎的语言,php应用常常是以代码明文的发式发布,但是有时候对于发布的代码我们想要进行保护,需要对php代码进行混淆与加密,让增加破解者的逆向难度,从而达到保护自己成果的目的. ...