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, ...
随机推荐
- python 2 和 python 3的区别
python2和python3区别 python2:源码不统一,源码(功能)重复,维护困难,除法的时候返回来的是小数点,()浮点数 python3:源码统一,源码不重复,除法的时候返回来的是整 ...
- 22 Years of KDE
22 Years of KDEhttps://timeline.kde.org/ http://www.kdedevelopers.org/
- Mysterious Crime CodeForces - 1043D (哈希)
大意: 给定m个n排列, 求有多少个公共子串. 枚举每个位置, hash求出最大匹配长度. #include <iostream> #include <sstream> #in ...
- SQL注入之DVWA平台测试mysql注入
今天主要针对mysql常用注入语句进行测试. 测试环境与工具: 测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-tabl ...
- [转载]aspnet webapi 跨域请求 405错误
写了个webapi给同事用ajax调用,配置完跨域以后get请求完全没问题,post就一直报405错误,花了半天时间就是解决不了,后来在网上看到一博主的帖子才知道原来是webapi 默认的web.co ...
- JS基础_if练习二
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Django基础第三篇
一.ORM操作 1.常用字段和参数 Autofied 自增的整形字段,必填参数primary_key=True, 则成为数据库的主键,如无该字段,django自动创建 IntegerField 一个 ...
- JavaJDBC【二、Mysql包加载与使用】
连接数据库前提条件是: 1.加载mysql驱动 2.获取连接 加载驱动前需要将mysql的jar包引入项目 Demo: package JDBC; import java.sql.DriverMana ...
- 百度编辑神器ueditor在ajax或form提交内容时候异常
百度编辑神器ueditor在ajax或form提交内容时候异常,一:⑴web.config中<system.web> <httpRuntime requestValidationMo ...
- Delphi ClearCommError函数