度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。

Input

这里包括多组测试数据,每组测试数据包含一个正整数NN,代表全1序列的长度。

1≤N≤2001≤N≤200

Output

对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。

Sample Input

1
3
5

Sample Output

1
3
8 

Hint

如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<set>using namespace std;//compare比较函数:相等返回0,大于返回1,小于返回-1
int compare(string str1,string str2)
{if(str1.length()>str2.length()) return 1;else if(str1.length()<str2.length())  return -1;else return str1.compare(str2);
}
//高精度加法
//只能是两个正数相加
string add(string str1,string str2)//高精度加法
{string str;int len1=str1.length();int len2=str2.length();//前面补0,弄成长度相同if(len1<len2){for(int i=1;i<=len2-len1;i++)str1="0"+str1;}else{for(int i=1;i<=len1-len2;i++)str2="0"+str2;}len1=str1.length();int cf=0;int temp;for(int i=len1-1;i>=0;i--){temp=str1[i]-'0'+str2[i]-'0'+cf;cf=temp/10;temp%=10;str=char(temp+'0')+str;}if(cf!=0)  str=char(cf+'0')+str;return str;
}
//高精度减法
//只能是两个正数相减,而且要大减小
string sub(string str1,string str2)//高精度减法
{string str;int tmp=str1.length()-str2.length();int cf=0;for(int i=str2.length()-1;i>=0;i--){if(str1[tmp+i]<str2[i]+cf){str=char(str1[tmp+i]-str2[i]-cf+'0'+10)+str;cf=1;}else{str=char(str1[tmp+i]-str2[i]-cf+'0')+str;cf=0;}}for(int i=tmp-1;i>=0;i--){if(str1[i]-cf>='0'){str=char(str1[i]-cf)+str;cf=0;}else{str=char(str1[i]-cf+10)+str;cf=1;}}str.erase(0,str.find_first_not_of('0'));//去除结果中多余的前导0return str;
}
//高精度乘法
//只能是两个正数相乘
string mul(string str1,string str2)
{string str;int len1=str1.length();int len2=str2.length();string tempstr;for(int i=len2-1;i>=0;i--){tempstr="";int temp=str2[i]-'0';int t=0;int cf=0;if(temp!=0){for(int j=1;j<=len2-1-i;j++)tempstr+="0";for(int j=len1-1;j>=0;j--){t=(temp*(str1[j]-'0')+cf)%10;cf=(temp*(str1[j]-'0')+cf)/10;tempstr=char(t+'0')+tempstr;}if(cf!=0) tempstr=char(cf+'0')+tempstr;}str=add(str,tempstr);}str.erase(0,str.find_first_not_of('0'));return str;
}//高精度除法
//两个正数相除,商为quotient,余数为residue
//需要高精度减法和乘法
void div(string str1,string str2,string &quotient,string &residue)
{quotient=residue="";//清空if(str2=="0")//判断除数是否为0{quotient=residue="ERROR";return;}if(str1=="0")//判断被除数是否为0{quotient=residue="0";return;}int res=compare(str1,str2);if(res<0){quotient="0";residue=str1;return;}else if(res==0){quotient="1";residue="0";return;}else{int len1=str1.length();int len2=str2.length();string tempstr;tempstr.append(str1,0,len2-1);for(int i=len2-1;i<len1;i++){tempstr=tempstr+str1[i];tempstr.erase(0,tempstr.find_first_not_of('0'));if(tempstr.empty())tempstr="0";for(char ch='9';ch>='0';ch--)//试商{string str,tmp;str=str+ch;tmp=mul(str2,str);if(compare(tmp,tempstr)<=0)//试商成功{quotient=quotient+ch;tempstr=sub(tempstr,tmp);break;}}}residue=tempstr;}quotient.erase(0,quotient.find_first_not_of('0'));if(quotient.empty()) quotient="0";
}
string c[205];
void init()
{c[1]="1";c[2]="2"; for(int i=3;i<=200;i++){c[i]=add(c[i-1],c[i-2]);}
}
int main()
{init();/*string str1,str2;string str3,str4;while(cin>>str1>>str2){cout<<add(str1,str2)<<endl;cout<<sub(str1,str2)<<endl;cout<<mul(str1,str2)<<endl;div(str1,str2,str3,str4);cout<<str3<<"  "<<str4<<endl;}*/int n;while(cin>>n){cout<<c[n]<<endl;}return 0;
}

转载于:https://www.cnblogs.com/Staceyacm/p/10781799.html

HDU - 5686-Problem B (递推+高精)相关推荐

  1. uva10401Injured Queen Problem(递推)

    题目:uva10401Injured Queen Problem(递推) 题目大意:依然是在棋盘上放皇后的问题,这些皇后是受伤的皇后,攻击范围缩小了.攻击范围在图中用阴影表示(题目).然后给出棋盘的现 ...

  2. hdu 2013 蟠桃记-递推-[解题报告]C++

    蟠桃记 问题描述 : 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题! 什么问题?他研究的问题是蟠桃一共有多少个! 不过,到最 ...

  3. UVA11069 A Graph Problem【递推】

    Given an undirected graph of the following form with n nodes, 1 ≤ n ≤ 76:     Your task is to calcul ...

  4. hdu 2086 A1 = ?(递推)

    Problem Description 有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, -. n). 若给出A0, An+1, 和 C1, C2, -..C ...

  5. HDU - 3336 next运用+递推

    题目的匹配应该也要看成一个文本串与另一个模式串的匹配过程 Text是以当前i结尾的后缀来匹配Pattern的前缀(非真) 这里的Pattern肯定是可以匹配成功的,直接由next来保证(next总是当 ...

  6. hdu-2606 Renovation Problem(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2606 Renovation Problem Time Limit: 2000/1000 MS (Jav ...

  7. hdu 4472 Count(递推即dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4472 代码: #include <cstdio> #include <cstring ...

  8. poj1737 Connected Graph(计数,组合数学,递推,高精)

    求n个点的连通图的个数f[n],带标号.有两种做法. 1.直接搞出f[n]的递推式. f[n]=∑k=1n−1f[k]∗f[n−k]∗Ck−1n−2∗(2k−1)f[n]=\sum\limits_{k ...

  9. 【卡特兰数】【递推】【高精+压位】JZOJ·WZK打雪仗

    题目大意: 有2n个人站在一个圈里,有n人要去其他n人那(两人连一线),线不能与其他线碰在一起,让你求方案数. 思路: 卡特兰数,因为位数大,高精压位走起 CodeCodeCode: #include ...

最新文章

  1. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
  2. css美化单选款、复选框
  3. Scala - 快速学习08 - 函数式编程:高阶函数
  4. ansible编译安装--操作系统环境Redhat6.4
  5. 防火墙简介(二)——firewalld防火墙
  6. Raphael的set使用
  7. 内存管理之直接内存管理
  8. php-elasticsearch 单条、批量插入数据
  9. 大姨吗的戏 投资人的伤
  10. 如何防止Eamil发邮件泄露IP地址,隐藏发件人IP教程
  11. TRC文件转ASC文件
  12. linux 内核态 抓屏代码,Android screencap截屏指令
  13. 阿里巴巴实习 面试题
  14. 软件测试的容错性测试方法,你真的了解容错性测试吗?
  15. 1.1版走迷宫小游戏(C++)
  16. 《科学》:基因编辑婴儿入选年度“科学崩坏”事件
  17. See!AI正在悄然改变着医学诊断、假肢和视觉辅助
  18. 现代通信原理思维导图--第一章 信号
  19. Android数据库处理重复插入Insert数据的问题
  20. 后疫情时代,美团是否会掉队?

热门文章

  1. MQTT 物联网协议
  2. 疯狂的java 目录_疯狂创客圈 JAVA 高并发 总目录
  3. 面试题,反射创建类实例的三种方式是什么
  4. 访问数据库_Lua 数据库访问
  5. 程序员幽默:年后上班综合症,你中了几招?!!
  6. 后端技术:Java编程中忽略这些细节,Bug肯定少不了
  7. 前端:分享一些实用的JS代码片段
  8. 数据库技术基础:数据库与数据库管理系统概念介绍
  9. 盘点最著名的10位伟大的程序员
  10. Shell中I/O重定向的用法笔记