hdu 2018 - 递推】的更多相关文章

第n月的牛的数量由第n-1个月的老牛加上n-1个月新生的小牛,得到公式F(n)=F(n-1)+F(n-3) AC代码: #include<cstdio> const int maxn=55; int ans[maxn]; void solve(){ ans[1]=1; ans[2]=2; ans[3]=3; ans[4]=4; for(int i=5;i<55;++i){ ans[i]=ans[i-1]+ans[i-3]; } } int main(){ solve(); int n;…
dp[i][1..4] 第i年时年龄为1234的牛的数目 */ #include <cstdio> #include <cstring> ; ]; int main(){ memset(dp,,sizeof(dp)); dp[][] = dp[][] = dp[][] = ; ;i<;i++){ dp[i][] = dp[i][] = dp[i-][]+dp[i-][]; dp[i][] = dp[i-][]; dp[i][] = dp[i-][]; } int n; whi…
HDOJ(HDU).2044-2049 递推专题 点我挑战题目 HDU.2044 题意分析 先考虑递推关系:从1到第n个格子的时候由多少种走法? 如图,当n为下方格子的时候,由于只能向右走,所以有2中走法.当n为上方格子的时候,由于只能向右走,所以也有2种走法. 不妨用a[n]来表示第n个格子有几种走法,根据上述描述,不难找出递推关系,a[n] = a[n-1] + a[n-2].但是对于n<2的数字,就不适用了.也很简单,n<2的时候数一下即可,从1走到1,只有一种走法,从1走到2,有一种走…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个环可以取下或放上,cost=1.求最小cost.MOD 200907. 解题思路: 递推公式 题目意思非常无聊,感觉是YY的. 设$dp[i]$为取第i个环时的总cost. $dp[1]=1$,$dp[2]=2$,前两个环取下是没有条件要求的. 从i=3开始,由于条件对最后的环限制最大,所以从最后一…
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=2065 递推类题目, 可以考虑用数学方法来做, 但是明显也可以有递推思维来理解. 递推的话基本就是状态转移了, 如何找状态是递推的关键. 我们把这个分为四个状态 A 出现次数的奇偶和B出现状态的奇偶,我们可以构造出四个状态: A        B 第一个状态 :        偶       偶     0 第二个状态 :        偶       奇     1 第三个状态 :        …
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1297 题目大意: 有n个同学, 站成一排, 要求 女生最少是两个站在一起, 问有多少种排列方式. 题目分析: 1.  假设第n个学生是个男生, 我们可以直接将他放在最后有 dp[n-1]种 即: ...............M   dp[n-1] 2.假设第n个放女生,要求两个女生在一起, 我们可以直接在最后放两个女生 即: .............FF    dp[n-2] 3.假设我们后面…
总结一下做递推题的经验,一般都开成long long (别看项数少,随便就超了) 一般从第 i 项开始推其与前面项的关系(动态规划也是这样),而不是从第i 项推其与后面的项的关系. hdu2044:http://acm.hdu.edu.cn/showproblem.php?pid=2044 //没开成long long WA了一次 #include<iostream> #include<cstdio> #include<algorithm> #include <s…
ZOJ 3182 Nine Interlinks 题目大意:把一些带标号的环套到棍子上,标号为1的可以所以操作,标号i的根子在棍子上时,只有它标号比它小的换都不在棍子上,才能把标号为i+1的环,放在棍子上或者取下,问n个环全部放在棍子上需要的最少步骤? 一个简单的递推题,可是我硬生生想复杂了还把队友带偏了,真是惭愧,还好源源的一发强大的思路,简简单单就过了,源源太强了,tql,orz.我们以4个环全放上棍子为例,我们要先把第3个环放上,然后又把前两个环都取下,然后才能放上第4个环,再又把前两个环…
HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstring> using namespace std; const int N = 5; int msize, Mod; struct Mat { int mat[N][N]; }; M…
转自:http://blog.csdn.net/shiqi_614/article/details/7983298 题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果第i字符是‘I’表示排列中的第i-1个数是小于第i个数的.如果是‘D’,则反之.定义dp[i][j]表示在这个排列中第i个数字以j结尾的,满足条件的子排列有多少个.如果第i个字符是‘I’,那么明显可以得到dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+……+dp[i-1][1]…