CodeVs 1011 数的计算
来源:互联网 发布:一入淘宝深似海下一句 编辑:程序博客网 时间:2024/05/03 23:43
CodeVs 1011 数的计算
By MPS
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
题目描述 Description
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:
1. 不作任何处理;
2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.
输入描述 Input Description
一个数n
输出描述 Output Description
满足条件的数的个数
样例输入 Sample Input
6
样例输出 Sample Output
6
数据范围及提示 Data Size & Hint
6个数分别是:
6
16
26
126
36
136
本来不想写解题报告的,毕竟too simple,但是为了巩固递推算法,所以在此特意写了2种算法的解题报告
算法1:记忆化搜索
对于每一层我们只需要搜索1——m/2即可,然后加起来,这里为了避免TLE,特别的,采用了记忆化的手段
代码不再赘述
算法2:递推
f(n)=f(1)+f(2)+f(3)+...+f(n/2)+1 (n≥1)
<归纳法证明>
设F[n]为答案集,则经过观察
f[2]=1(2)+1(12)=2=f[1]+1
f[3]=1(3)+1(13)=2=f[1]+1
f[4]=1(4)+1(24)+1(124)+1(14)=4=f[2]+f[1]+1
.
.
.
易求得:f(n)=f(1)+f(2)+f(3)+...+f(n/2)+1 (n≥1)
初始条件:f(1)=1
时间复杂度O(N(N/2))
代码:
#include <iostream>using namespace std;const int MaxN=1001;long long n,i,j,f[MaxN];int main(){ cin>>n; f[1]=1; for(i=2;i<=n;i++){ f[i]=1; for(j=1;j<=i/2;j++) f[i]+=f[j]; } cout<<f[n]<<endl; return 0;}
-----------------------------------------------------------------------------------------------------------------------------------------------------
0 0
- CodeVs 1011 数的计算
- CODEVS 1011 数的计算
- 【codevs 1011】数的计算
- codeVS 1011 数的计算
- CodeVs 数的计算;
- CODEVS|1008|数的计算
- CODEVS 1011 数的计算 & 2001NOIP普及组T1
- codeVS 1011 数的计算(2001年NOIP全国联赛普及组)
- 1011 数的计算
- 1011数的计算
- 1011 数的计算
- CodeVS 1039 数的划分
- CODEVS 1039数的划分
- CODEVS 1039 数的划分
- Codevs 1039 :数的划分
- Codevs 1039 数的划分
- 【codevs 1039】数的划分
- 【wikioi】1011 数的计算
- linux内存管理之malloc、vmalloc、kmalloc的区别
- 二项式系数点滴
- Dive into python第三章内置数据类型总结
- 如何判断链表有环并计算环的长度
- 小白书79页对字符串和字符的排序
- CodeVs 1011 数的计算
- HDU 3001 三进制状压DP
- c primer plus编程练习第十一章(纯手打欢迎指错)
- [Java大数+输入输出优化] hdu 5047 Sawtooth
- C++中宏定义与内联函数区别
- acdream 1412 2-3 Trees dp
- uva 724 Prime Ring Problem
- 快播网站最后,她打开厢房的窗户,把一盆浊水给倒进湖里
- 马尔科夫随机场