CDOJ 1133 菲波拉契数制 变直接统计为构造
菲波拉契数制
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
我们定义如下数列为菲波拉契数列:
F(1)=1F(1)=1
F(2)=2F(2)=2
F(i)=F(i−1)+F(i−2)(i>=3)F(i)=F(i−1)+F(i−2)(i>=3)
给定任意一个数,我们可以把它表示成若干互不相同的菲波拉契数之和。比如1313有三种表示法
13=1313=13
13=5+813=5+8
13=2+3+813=2+3+8
现在给你一个数nn,请输出把它表示成若干互不相同的菲波拉契数之和有多少种表示法。
Input
第一样一个数TT,表示数据组数,之后TT行,每行一个数nn。
T≤105T≤105
1≤n≤1051≤n≤105
Output
输出TT行,每行一个数,即nn有多少种表示法。
Sample input and output
| Sample Input | Sample Output |
|---|---|
6 |
1 |
Source
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>
#include <queue>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define MM(a,b) memset(a,b,sizeof(a));
#define inf 0x7f7f7f7f
#define FOR(i,n) for(int i=1;i<=n;i++)
#define CT continue;
#define PF printf
#define SC scanf
const int mod=1000000007;
const int N=1e5+100;
int dp[N],a[N]; int main()
{
MM(dp,0);
a[1]=1;a[2]=2;
int cnt=3;
for(;a[cnt-1]<=1e5;cnt++)
a[cnt]=a[cnt-1]+a[cnt-2];
cnt-=2; dp[0]=1;
for(int i=1;i<=cnt;i++)
for(int j=100000;j>=a[i];j--)
dp[j]+=dp[j-a[i]];
int n,cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
printf("%d\n",dp[n]);
}
return 0;
}
错因分析:这道题想到了直接统计,比如1有一种组成方式,2有一种,那么因为3=1+2,所以3=两种
5=2+3,所以5也有两种.....但是无法处理数字重复使用的情况,比如13=5+8,但是5=3+2,8=5+3
这样的话那么3很有可能被重复使用,但是数字又不能出现重复。。。所以就没办法了。。
所以统计走不通的话,就只有改成构造了,枚举一下斐波那契数能构造出来的数,细心可以发现斐波那契数大概也就20多个的样子(在<=1e5范围内)。
CDOJ 1133 菲波拉契数制 变直接统计为构造的更多相关文章
- Contest20140906 ProblemC 菲波拉契数制 DP
C.菲波拉契数制时间:2s 内存:65536KB我们定义如下数列为菲波拉契数列: F (1) = 1 F (2) = 2 ...
- UESTC_菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming<Problem L>
L - 菲波拉契数制升级版 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
- UESTC_菲波拉契数制 2015 UESTC Training for Dynamic Programming<Problem E>
E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC 2015dp专题 E 菲波拉契数制 dp
菲波拉契数制 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descr ...
- [dp]uestc oj E - 菲波拉契数制
E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- [dp][uestc]L - 菲波拉契数制升级版
数据很大,以背包的思路数组开不下. 先定序地考虑一个菲波拉契数如fib(i)的表示法,假设i比较大,由菲波拉契数的定义可知道fib(i)=fib(i-1)+fib(i-2);要找到其它表示就继续拆分f ...
- 递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据
/*====================================================================== 著名的菲波拉契(Fibonacci)数列,其第一项为0 ...
- e8_4输出菲波拉契数列的前10项
program fbnq;{输出菲波拉契数列的前10项} var a:..] of integer; i:integer; begin a[]:=; a[]:=; do a[i]:=a[i-]+a[i ...
- C语言-郝斌笔记-005菲波拉契序列
菲波拉契序列 /* 菲波拉契序列 1 2 3 5 8 13 21 34 */ # include <stdio.h> int main(void) { int n; int f1, f2, ...
随机推荐
- 文件操作:w,w+,r,r+,a,wb,rb
1.文件操作是什么? 操作文件: f = open("文件路径",mode="模式",encoding="编码") open() # 调用操 ...
- txt\excel\cvs\xml存储测试数据
一.目录结构 二.txt存储数据 1.txtData.txt如下: 请您输入手机/邮箱/用户名 请您输入密码 请您输入验证码 2.helper中读取txt数据的代码 def readTXT(self) ...
- python函数篇0-2
函数的有三中不同的参数: 普通参数 默认参数 动态参数# ######### 定义函数 ######### # name 叫做函数func的形式参数,简称:形参def func(name): p ...
- Web前端开发JavaScript提高
JavaScript 一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,它的解释器被称为JavaScript引擎,是浏览器的一部分,并且是被广泛用于客户端的脚本语言,JavaS ...
- 02docker核心概念
1:docker三大核心概念 核心概念 描述 镜像 Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板. 容器 Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用 ...
- js之数据类型(对象类型——构造器对象——数组2)
一.数组空位与undefined 数组空位:数组的某一个位置没有任何值 产生空位的原因:数组中两个逗号之间不放任何值:用new Array()的方法,参数里是个数字:通过一个不存在的下标去增加数组:增 ...
- 帝国cms 权限操作
<? if ($classid==5 || $classid==6 || $classid==7 || $classid==8 || $classid==9 || $classid==10 || ...
- KVM命令记录
创建qcow2镜像qemu-img create -f qcow2 /vm/kvm/img/vm41.img 500G 创建虚拟机virt-install --name=vm41 --disk pat ...
- layui弹出层基础参数
一.type-层类型 类型:Number 默认为0(信息框); 1(页面层),可以在页面添加HTML内容 2(iframe层) 3(加载层)加载时显示的弹出框 4(tips层) 需要绑定ID就不展示 ...
- Samba passwd smbpasswd and tdbsam
ome commands to convert samba backend password-databases. If you use "passdb backend = smbpassw ...