随笔分类 - 递推 & 找规律
摘要:题意:Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?分析:先将A柱子上的k个盘子通过四个柱子移动的D柱子上,在将剩下的n-k盘子通过三个柱子移动到C柱子上,在将D柱上的盘子通过四个柱子移动到C柱子上。 dp[i] = m..
阅读全文
摘要:题意:还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。分析:dp[i][0]表示将 i 个盘子从两边移动到中间的步数dp[i][1]表示将 i 个盘子从中间移动到两边的步数讲n个盘子从左边移动到右边的总步数为 dp[i-1][0]+dp[i-1][1]+2View Code #include <cstdio>#include <cstring>in
阅读全文
摘要:题意:在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。分析:可以用母函数,也可以用DPdp[n][m]表示钱n用前m种硬币的兑换方式 [ 1 m = 1;dp(n, m) = [ dp(n, n) n < m; [ 1 + dp(n, n-1) n = m; [ dp(n, m-1) + dp(n-m, m) n > m > 1.dp_记忆化搜索#include <stdio.h>#include <string.h>int dp[3276...
阅读全文
摘要:题意:有N个字母,每个字母的数量不定。用这N个字母组成一个长为M的串,并且规定这个串中每个字母能出现的次数。求这样的串的总数。分析:之前处理好组合数c[][],然后d[i]表示字符串长度为i的时候用所给字符串构成的满足条件的情况数,递推式: d[s[i][k]+j] += d[j]*c[m-j][s[i][k]];#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define clr(x)memset(x,0,sizeof(x))const int ma
阅读全文
摘要:题意:DU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论后一般没有解决不了的问题,这也只有HDU ACM集训队特有的圆桌会议,有一天你也可以进来体会一下哦:),在一天在讨论的时候,Eddy想出了一个极为古怪的想法,如果他们在每一分钟内,一对相邻的两个ACM队员交换一下位子,那么要多少时间才能得到与原始状态相反的座位顺序呢?(即对于每个队员,原先在他左面的队员后来在他右面,原先在他右面的队员在他左面),这当然难不倒其他的聪明的其他队友们,马上就把这个古怪的问题给解决了,你知道是怎么解决的吗?分
阅读全文
摘要:题意: 有 0到 n 个格子,掷骰子走路,求出到终点的数学期望,有飞行的路线。分析: 求出用dp[x]表示走到x这个位置的数学期望假如x能到达6个格子x1,x2,..x6,那么dp[x]中x格子的期望就是它到6个格子的概率 分别乘以6个格子的期望,因为是从后往前推的,所以x1...x6的期望已经知道了x的期望也就能知道了,然后再+1因为要多走一步。#include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))#define maxn 100005struct node{ int to,next
阅读全文
摘要:题意: 知道了汉诺塔的一个状态,求把全部汉诺塔移动到B上的步数。分析: 逆向推即可。#include<stdio.h>#include<string.h>char str[100] ;long long calc(char A, char B, char C, int n){ if(n==0) return 0 ; if(str[n-1]==B) return calc(C,B,A,n-1) ; if(str[n-1]==A) return calc(A,C,B,n-1)+(1LL<<(n-1));}int main (){ ...
阅读全文
摘要:Problem Description1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.在第1根柱子上的盘子是a[1],a[2],...,a[n]. a[1]=n,a[2]=n-1,...,a[n]=1.即a[1]是最下面的盘子.把n个盘子移动到第3根柱子.每次只能移动1个盘子,且大盘不能放在小盘上.问第m次移动的是那一个盘子.Input每行2个整数n (1 ≤ n ≤ 63) ,m≤ 2^n-1.n=m=0退出Output输出第m次移动的盘子的号数.Sample Input63 1 63 2 0 0Sample Output1 2分析:从 移动看出
阅读全文
摘要:Description现在有x个同样的球,和y个同样的杯子,现在要把这x个球全部放到y个杯子里,请问有多少种不同放法?杯子顺序没有区分,所以1,1,2和2,1,1算作一种放法Input每组输入两个整数x,y(0 <x,y< 20)处理到文件结束Output每组测试数据用一行输出所有的种类数Sample Input7 3Sample Output8code:View Code #include<stdio.h>int d(int m,int n){ if(m==0||n==1) return 1; if(m<n) return d(m,m); else return
阅读全文
摘要:Problem DescriptionEddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的ac题目的数量摘录下来,然后从中选择一部分人(或者全部)按照ac的数量分成两组进行比较,他想使第一组中的最小ac数大于第二组中的最大ac数,但是这样的情况会有很多,聪明的你知道这样的情况有多少种吗?特别说明:为了问题的简化,我们这里假设摘录下的人数为n人,而且每个人ac的数量不会相等,最后结果在64位整数范围内.Input输入包含多组数据,每组包含一个整数n,表示从Ranklist上摘录的总人数。Outpu
阅读全文
摘要:Problem DescriptionAunt Lizzie takes half a pill of a certain medicine every day. She starts with a bottle that contains N pills.On the first day, she removes a random pill, breaks it in two halves, takes one half and puts the other half back into the bottle.On subsequent days, she removes a random
阅读全文
摘要:Problem Description大家都知道,pfz是“成电杰出学生”,在成电杰出学生的颁奖典礼上,lxh和pfz都没有听台上在说什么,而是在下面讨论当晚的美式足球比赛,lxh预测说纽约巨人队今晚将会得到11分,pfz马上说不可能。因为通常来说美式足球比赛的得分只有3分和7分两种形式,无论怎么得分都不可能得到11分。想了一会以后,lxh发现其实11分以上的分数都是可以得到,于是11就是最大的不可以得到的分数。现在问题来了,如果比赛的得分只有x分和y分两种形式,那么最大的不可以得到的分数是多少呢?Input本题包括多组输入每组输入2个整数x, y(2<=x, y<=10^8),x
阅读全文
摘要:Problem Description在一无限大的二维平面中,我们做如下假设:1、每次只能移动一格;2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);3、走过的格子立即塌陷无法再走第二次;求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。Input首先给出一个正整数C,表示有C组测试数据接下来的C行,每行包含一个整数n (n<=20),表示要走n步。Output请编程输出走n步的不同方案总数;每组的输出占一行。Sample Input212Sample Output37分析: 递推式:a[i]=2*a[i-1]
阅读全文
摘要:Problem Description小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望。不过没过几天发现了棋盘的好玩之处。从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),现在小兔又想如果不穿越对角线(但可接触对角线上的格点),这样的路径数有多少?小兔想了很长时间都没想出来,现在想请你帮助小兔解决这个问题,对于你来说应该不难吧!Input每次输入一个数n(1<=n<=35),当n等于-1时结束输入。Output对于每个输入数据输出路径数,具体格式看Sample。Sample Input1312-1Sample Ou
阅读全文
摘要:Problem Description今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁。RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿,G是月野兔;第二次猜:R是草儿,P是月野兔,G是公主;第三次猜:R是草儿,P是公主,G是月野兔;......可怜的野骆驼第六次终于把RPG分清楚了。由于RPG的带动,做ACM的女生越来越多,我们的野骆驼想都知道她们,可现在有N多人,他要猜的次数可就多了,为了不为难野骆驼,女生们只要求他答对一半或以上就算过关,请问有多少组答案能使他顺利过关。Input输入的数据里有多个case,每个
阅读全文
摘要:Problem Description由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥。小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是每次都从A开始跳,每次都可以任意跳到其他块,但最后必须跳回A,且不能原地跳.为达到减肥效果,小黑每天都会坚持跳n次,有天他突然想知道当他跳n次时共几种跳法,结果想了好几天没想出来-_-现在就请你帮帮他,算出总共有多少跳法。Input测试输入包含若干测试用例。每个测试用例占一行,表示n的值(1<=n<=1000)。当n为0时输入结束。Output每个测试用例的输出占一行,由于
阅读全文


浙公网安备 33010602011771号