Contest20140906 ProblemC 菲波拉契数制 DP
C.菲波拉契数制
时间:2s 内存:65536KB
我们定义如下数列为菲波拉契数列:
F (1) = 1
F (2) = 2
F (i) = F(i-1)+F(i-2) (i>=3)
给定任意一个数,我们可以把它表示成若干不同的菲波拉契数之和。比如13有三种表示法
13=13
13=5+8
13=2+3+8
现在给你一个数n,请输出把它表示成若干不同的菲波拉契数之和有多少种表示法。
输入:
第一样一个数T,表示数据组数,之后T行,每行一个数n。
20%的数据:T<=10,n<=30
60%的数据:T<=100,n<=100000
100%的数据:T<=10^5, n<=10^18
输出:
输出T行,每行一个数,即n有多少种表示法。
样例:
输入:
6
1
2
3
4
5
13
输出:
1
1
2
1
2
3
这种DP很不容易看出想出状态,我在考试的时候大部分时间都用在这道题上了,评讲时也证明我基本上已经想了90%的正解,只有一个我没有想到,即最大表示后每一项后移步数不超过1。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<string>
#include<queue>
#include<stack>
using namespace std;
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
typedef long long qword;
typedef long long number;
#define MAXF 110
#define MAXN 110000
#define PROB "C"
qword fib[MAXF];
int topf;
vector<int> vec;
void init()
{
int i;
fib[]=fib[]=;
for (i=;fib[i-]<1000000000000000000LL;i++)
{
fib[i]=fib[i-]+fib[i-];
}
topf=i-;
}
qword f[MAXF][];
int a[MAXF];
qword n,m;
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
freopen(PROB".in","r",stdin);
freopen(PROB".out","w",stdout);
int i,j,k;
int x,y,z;
int nn;
scanf("%d",&nn);
init();
while (nn--)
{
scanf(LL ,&n);
vec.clear();
for (i=topf;i>;i--)
{
if (fib[i]<=n)
{
n-=fib[i];
vec.push_back(i);
}
}
sort(vec.begin(),vec.end());
for (i=;i<vec.size();i++)
{
a[i]=(-((i)?vec[i-]:)+vec[i]);
}
f[][]=;
f[][]=a[]/;
for (i=;i<vec.size();i++)
{
f[i][]=((a[i]-)/)*f[i-][]+((a[i])/)*f[i-][];
f[i][]=f[i-][]+f[i-][];
}
printf("%lld\n",f[vec.size()-][]+f[vec.size()-][]);
}
return ;
}
Contest20140906 ProblemC 菲波拉契数制 DP的更多相关文章
- 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 ...
- 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 ...
- CDOJ 1133 菲波拉契数制 变直接统计为构造
菲波拉契数制 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- [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, ...
随机推荐
- 经典SQL语句大全之基本函数
SQL Server基本函数 1.字符串函数 长度与分析用 1,datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格2,substring(expression,sta ...
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,Av ...
- Quartz.NET simple_demo
Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和 ...
- CentOS 6.7安装配置Ansible
1.准备CentOS环境 yum update && yum upgrade 2.控制服务器与被管理服务器要求 Master:Python 2.6+ Slave:Python 2.4+ ...
- SQL语句对应的LINQ和Lambda语句
1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from studentLinq: from s in Student ...
- ASP.Net IE10+ SCRIPT:XXX_doPostBack 未定义
问题描述 GridView中分页控件,点击分页无反应,Linkbutton点击无反应,打开Web控制台,发现如下错误:SCRIPTXXX:_doPostBack 未定义:查询后得知,是由于.NET F ...
- .NET性能优化方面的总结
从2004年底开始接触C#到现在也有2年多的时间了,因为有C++方面的基础,对于C#,我习惯于与C++对比.现在总结一些.NET方面的性能优化方面的经验,算是对这两年多的.NET工作经历的总结. ...
- 使用微软企业库5.0提供的unity配置解藕系统demo(源码)
最近公司集50多号开发人员的人力围绕一个系统做开发,框架是免不了要统一的,公司提供的架构,利于分工合作,便于维护,扩展,升级,其中使用了到微软的企业库来解藕系统,只是因为框架封装,于是在网上学习了一个 ...
- Delphi Excel
用delphi写excel文件 2007-03-18 21:12 1.引用: Excel2000, OleServer,Comobj, StdCtrls 2.声明变量: ExcelA ...
- 这次是C#中的接口
接口的出现,是为了解决C#中不允许多重继承的问题. 1.什么是接口? 我觉得可以把接口理解为对一组方法声明进行的统一命名,但这些方法没有提供任何实现. 通过接口,就可以对方法进行统一管理,避免了在每种 ...