递推
呆呆与笨笨
梦想是被追逐的,而不是幻想的
展开
-
hdu 2049 不容易系列之(4)——考新郎(错排+排列组合)
解题思路:从n 个新郎中原创 2014-08-01 16:54:10 · 443 阅读 · 0 评论 -
hdu 1133 Buy the Ticket(Catalan数)
题目大意:M+N个人排队买票,票的单价是50¥,每个人只能买一张。 M个人拿50的去买,N个人拿100的去买,然后悲剧的是售票处开始的时候没有钱,所以如果拿100块买票人前面的拿50块买票的人小于或者等于用100块买票的人,这种排队方式就不合法,也就是不能顺利全部都买到票(因为没零钱找了)!原创 2014-08-09 11:41:20 · 487 阅读 · 0 评论 -
hdu 2190 悼念512汶川大地震遇难同胞——重建希望小学(递推)
解题思路:现在长度为i,那么它是在i-1长度基础上新增了1,可以让这新增的1*3区域铺三块1*1的砖,而前面部分就是a[i-1]种排法。另外新增区域也可以考虑跟前一列用2*2的砖一块铺,由于宽度固定为3,那么最后这两列(2*3的区域)可以有两种排法(2*2的砖在上部或在下部),而它们左边的排法是a[i-2]种,因此乘2。因此得递推公式:a[i] = a[i-1] + 2*a[i-2].原创 2014-08-14 10:16:54 · 1092 阅读 · 0 评论 -
hdu 2068 RPG的错排(错排)
#include#include#includeusing namespace std;long long a[15]={0};void fun(){ int i; a[2]=1; for(i=3;i<15;i++) { a[i]=(i-1)*(a[i-1]+a[i-2]);//错排公式 }}long long facots(原创 2014-08-21 16:18:45 · 456 阅读 · 0 评论 -
hdu 2047 阿牛的EOF牛肉串(递推)
假设n=□□□□□□有f(n)种不同的串,当第n个是o时,那么第n-1个不能为o,此种情况有f(n-2)*2个当第n个不是o时,有f(n-1)*2个;即f(n)=f(n-1)*2+f(n-2)*2原创 2014-07-25 20:22:46 · 672 阅读 · 0 评论 -
hdu 1995 汉诺塔V(递推)
#includeusing namespace std;long long fun(int n){ if(n==0) return 1; return fun(n-1)*2;}int main(){ int n,m,t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); printf("%I64d\n"原创 2014-07-23 11:12:33 · 432 阅读 · 0 评论 -
hdu 2046 骨牌铺方格(递推)
解题思路:Fibonacci数列原创 2014-07-31 21:13:47 · 457 阅读 · 0 评论 -
poj 1664 放苹果(递推)
解题思路:我们不妨令f(m,n)表示m个苹果放到n个盘子里有多少种放法,下面对不同的情况给予讨论:(1):当盘子数为1的时候,只有一种放法就是把所有苹果放到一个盘子里。(2):当苹果数为0的时候,也只有一种放法。(3):当m(4):当m>=n时,也分两种情况讨论,一种是至少有一个盘子里不放苹果,这样子就相当于f(m,n-1),第二种是,先取出n个苹果一个盘子里放一个,再将剩下的m-原创 2014-08-01 15:36:50 · 565 阅读 · 0 评论 -
hdu 2048 神、上帝以及老天爷(递推&错排)
三种思路:错排:1. N张字条的所有可能排列自然是N!(分母)。现在的问题就是求N张字条的错排数f(N)(分子)。首先我们考虑,如果前面N-1个人拿的都不是自己的票,即前N-1个人满足错排,现在又来了一个人,他手里拿的是自己的票。只要他把自己的票与其他N-1个人中的任意一个交换,就可以满足N个人的错排。这时有(N-1)*f(N-1)种方法。Besides,我们考虑,原创 2014-07-31 21:47:10 · 462 阅读 · 0 评论 -
hdu 1023 Train Problem II(卡特兰数)
递推关系式:Cn=(4*n-2)/(n+1)*Cn-1原创 2014-08-06 09:46:57 · 394 阅读 · 0 评论 -
hdu 1130 How Many Trees?(二叉树节点的Catalan数)
import java.util.*;import java.math.BigInteger;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner In=new Scanner(System.in); BigInteger原创 2014-08-06 10:39:55 · 461 阅读 · 0 评论 -
hdu 2067 小兔的棋盘(Catalan数)
#include#include#includeusing namespace std;__int64 cat[40];void fun(){ int i; cat[1]=2; for(i=2;i<=35;i++){ cat[i]=cat[i-1]*1.0/(i+1)*(4*i-2);//先做除再做乘,防止溢出!!! }}int main(){ int t,n; t=原创 2014-08-06 10:18:10 · 405 阅读 · 0 评论 -
Catalan数
卡特兰数前几项为 (OEIS中的数列A000108): 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640原创 2014-08-06 09:52:20 · 367 阅读 · 0 评论 -
poj 2229 Sumsets(递推&整数划分变形)
求把一个整数分解为2的幂的和共有几种方案6=1+1+1+1+1+16=1+1+1+1+26=1+1+2+26=1+1+46=2+2+26=2+47=1+1+1+1+1+1+17=1+1+1+1+1+27=1+1+1+2+27=1+1+1+47=1+2+2+27=1+2+4原创 2014-08-04 20:20:54 · 415 阅读 · 0 评论 -
hdu 2018 母牛的故事(递推)
第n年的牛,是前一年牛的头数,加上生下的头数,也就是能生产的母牛头数(n-3)f原创 2014-07-29 09:57:07 · 537 阅读 · 0 评论 -
hdu 1267 下沙的沙子有几粒?(递推&DP)
根据题目输入的是 H 和 D 的个数,用a [ i ] [ j ]代表有i个 H 和j个 D 的序列的种数。考虑最后一个字母是 H 还是 D 的情况,最后一个字母是 D 的情况的序列种数是a [ i ][ j-1 ],最后一个字母是 H 的情况的序列种数是a [ i-1 ][ j ]。则 :a [ i ][ j ] = a [ i-1 ][ j ] + a [ i ][ j-1 ];原创 2014-08-02 09:43:04 · 657 阅读 · 0 评论 -
九度 1084整数拆分
/*对于奇数n=2k+1:它的拆分的第一项一定是1,考虑去掉这个1,其实就一一对应于2k的拆分,因此f(2k+1)=f(2k).对于偶数n=2k:考虑有1和没有1的拆分。有1的拆分,与(2k-1)的拆分一一对应,与上面奇数的情况理由相同;没有1的拆分,将每项除以2,正好一一对应于k的所有拆分。因此f(2k)=f(2k-1)+f(k).需要注意f(n)会很大,不要溢出了。最终结果只要求除以十亿的原创 2015-03-28 15:28:25 · 396 阅读 · 0 评论