HDU1159_最长公共子序列
摘要:题目大意: 经典的求最长公共子序列问题。解题思路: 准确找出状态转移方程即可。 *状态转移: *1、if(str[i] == str[j]) dp[i][j] = dp[i-1][j-1]+1 *2、else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); 有状态转...
阅读全文
posted @
2012-02-16 16:42
cchun
阅读(139)
推荐(0)
HDU1087_跳棋递增序列_DP && 1160_FatMouse
摘要:HDU1087题目大意: 给你一串序列,要求求出一个序列,必须是上升的,但是中途可以跳着走,比如1,3,7,6,8,11,5,6,7 那么你可以走1,3,7,8,11,也可以走1,3,6,8,11,还可以走1,3,5,6,7……然后要求这个求出的序列要最大。解题思路: 用dp是比较好的选择。找出状态转移方程即可。/**状态转移:dp[i] = max(dp...
阅读全文
posted @
2012-02-16 10:47
cchun
阅读(165)
推荐(0)
HDU2050_折线分割平面数
摘要:题目大意: n条折线分割平面的个数。解题思路: 我们先来看一下N条相交的直线最多能把平面分割成几块。 很明显,当添加第n条直线时,为了使平面最多,则第n条直线要与前面n-1条直线都相交,切没有任何三条线交于一个点。这样,第n条直线一共有n-1个交点。我们知道,增加n个焦点,则增加n+1个平面。所以n条直线分割平面最大数是1 + 1 + 2 + 3 + ... ...
阅读全文
posted @
2012-02-15 17:31
cchun
阅读(327)
推荐(0)
HDU2563_统计难题_递推
摘要:题目大意:1、 每次只能移动一格;2、 不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);3、 走过的格子立即塌陷无法再走第二次;求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。解题思路:要分两种情况来考虑,a(n)为向上,b(n)为向左跟向右,f(n)为当前方案数。a(n) = a(n-1) + b(n-1);因为...
阅读全文
posted @
2012-02-15 17:12
cchun
阅读(642)
推荐(0)
HDU2045_LELE的RPG难题
摘要:题目大意: 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.解题思路: WA了两次,找错了规律。 当n>3时,list[i]=list[i-1]+list[i-2]*2; 看来还是找递推规律比较靠谱。递推思路:考虑长为n的串,...
阅读全文
posted @
2012-02-15 13:57
cchun
阅读(235)
推荐(0)
HDU2501_多米诺骨牌
摘要:题目大意: 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。解题思路: 找出递推公式: f[i] = f[i-1] + f[i-2] * 2;代码: #includeusing namespace std;const int MAX = 31;int m...
阅读全文
posted @
2012-02-15 11:29
cchun
阅读(377)
推荐(0)
HDU2018_母牛的故事
摘要:题目大意: 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?解题思路: 找出递推公式。假如当年为第n个年头,那么f[n] = f[n-1] + f[n-3].当前年等于去年的牛+3年前的牛,把去年的牛都当成不会生的,把3年前的牛都当成会生的即可。可画表:44 14 2 14 3 2 14 ...
阅读全文
posted @
2012-02-15 10:22
cchun
阅读(142)
推荐(0)
HDU1131_卡特兰数算二叉树个数
摘要:题目大意: 给你n个节点,然后求出能够组成的二叉树的个数,注意每个节点都有标号。解题思路: 卡特兰数,然后每个节点都有标号,所以最后要再对节点全排列,即n! 先预处理105以内的卡特兰数,之后再乘上n! 卡特兰数的递推公式:h(n)=h(n-1)*(4*n-2)/(n+1); h(0) = 1;代码://h(n)=h(n-1)*(4*n-2)...
阅读全文
posted @
2012-02-15 00:44
cchun
阅读(935)
推荐(0)
HDU1267_宇春猜想
摘要:题目大意: 给你m个H,n个D,要求组成的字符串中,从左往右算,H的数量大于D的数量。解题思路: 典型的catalan性质,可以算出C(m+n,m)-C(m+n,m+1),化简为 h(n,m) = (m+n)! * (m+1+n) / (m+1)! / n!代码://推导的公式: h(n,m) = (m+n)! * (m+1+n) / (m+1)! / n!#incl...
阅读全文
posted @
2012-02-15 00:20
cchun
阅读(260)
推荐(0)
卡特兰数
摘要:卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。卡塔兰数的一般项公式为 另类递归式: h(n)=((4*n-2)/(n+1))*h(n-1);前几项为 (OEIS中的数列A000108): 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16...
阅读全文
posted @
2012-02-14 20:02
cchun
阅读(285)
推荐(0)
HDU2067_小兔的棋盘_catalan_递推
摘要:题目大意: Problem Description 小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望。不过没过几天发现了棋盘的好玩之处。从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),现在小兔又想如果不穿越对角线(但可接触对角线上的格点),这样的路径数有多少?小兔想了很长时间都没想出来,现在想请你帮助小兔解决这个...
阅读全文
posted @
2012-02-14 19:32
cchun
阅读(909)
推荐(0)
HDU1133_50元跟100元去买票_catalan_大数运算
摘要:题目大意:很多人排队去买票,然后票价为50,但是每个人带的钱不一样,有的人带了50,有的人带了100,而那个票站一开始是没有钱的,这个买票的过程终结当票站没有钱,而有人拿100元去买票的时候。要求算出有多少种可能满足大家都可以买到票。解题思路:卡特兰数的百度百科上描述了这个过程,可以参考下:下面的转自:http://hi.baidu.com/a363310925/blog/item/aced542...
阅读全文
posted @
2012-02-14 17:17
cchun
阅读(266)
推荐(0)
HDU3368_翻转棋
摘要:题目大意: 给你一个棋盘,然后一开始已经有黑白棋了,现在轮到黑棋下,如果你下得这个黑棋的八个方向,有方向存在连续的白棋,且也以一颗黑棋结束,那么两个黑棋中夹着的白棋就变成了黑棋。要求求最大能翻转掉多少白棋。解题思路: 一开始没有看清楚题意,原来可以翻转掉多个方向的白棋。Dark must place a piece with the dark side up on th...
阅读全文
posted @
2012-02-14 17:08
cchun
阅读(180)
推荐(0)
HDU1018_求数的阶乘位数
摘要:题目大意: 给你一个数的大小为n, 1 ≤ n ≤ 10^7,求它的阶乘的位数。解题思路: 暴力是不可能了,数能够达到10^7,暴力出来的数,数组都放不下。 其实有一个公式叫斯特林公式, result=(long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1); ...
阅读全文
posted @
2012-02-14 16:52
cchun
阅读(415)
推荐(0)
HDU1134_catalan_大数运算
摘要:题目大意:给你2n个点要你在一个圈中连接任意两个点,而且直线不可相交。求直线数。11) h(0)=1代码:#includeusing namespace std;const int MAX_LEN = 10005;int catalan[101][MAX_LEN];void multip(int *ans, int b, int &len){ int carry = 0; for(in...
阅读全文
posted @
2012-02-14 16:05
cchun
阅读(291)
推荐(0)
HDU1443_Joseph_约瑟环
摘要:题目大意:有k个好人跟k个坏人按顺序坐着,然后按第m个杀人,求出把坏人全部先杀光的m的最小值。 0 k; n--) //n代表人数 { kill = (m - 1) % n; if(kill >= start && kill TLE代码:#includeusing namespace std;const int MAX = 30;const int M = 1...
阅读全文
posted @
2012-02-14 00:26
cchun
阅读(785)
推荐(0)
HDU1032_The 3n+1_数学题
摘要:题目大意:按照这种规则来编程。然后中途算出的数的个数成为一个cycle-length ,求出i与j之间的最大cycle-length.i与j max) { max = temp; } //cout
阅读全文
posted @
2012-02-13 19:29
cchun
阅读(202)
推荐(0)
HDU2674_N!模2009
摘要:题目大意: 要求n!%2009,n=2009的时候,n!%2009=0.这个时候,就只需要求出前面的2009个数的阶乘,后面的打出0即可。代码:#includeusing namespace std;int main(void){ int n; while(scanf("%d", &n) == 1) { if(n >= 2009) ...
阅读全文
posted @
2012-02-13 15:50
cchun
阅读(168)
推荐(0)
HDU1568_求fibonacci的前四位
摘要:题目大意: 求fibonacci数列的前面四位,注意f[0] = 0;解题思路: 凡是要求数的前面几位的,都可以用两边求对数的思想。让我想起了,m = n^n.要求n的前面一位。这个时候用对数,lg(m) = n*lg(n), m = pow(10, n*lg(n)),之后求n*lg(n)的小数部分,因为整数部分为10^P(p代表整数),全都为10000……,而...
阅读全文
posted @
2012-02-13 11:23
cchun
阅读(172)
推荐(0)
HDU1249_三角形切割平面
摘要:题目大意: 给你n个三角形,算出三角形切割出的平面数。解题思路: 没啥思路,直接就yy,额,写出数据。 1…………1+1 2…………1+1+6 3…………1+1+6+12 4…………1+1+6+12+18 看出啥,好吧,6的倍数递增。吐吐槽: 表示一开始只推出了三组,然后就yy了,以为是...
阅读全文
posted @
2012-02-13 01:00
cchun
阅读(261)
推荐(0)
HDU1060_计算n^n的最左边的数字
摘要:题目大意: 计算n^n的最左边的那个数的大小。解题思路: m = n ^ n,把m化成10的double次方。然后分解为整数部分跟小数部分,取小数部分计算。即pow(double(10), decimals), C++中pow函数如果第二个参数是double型的,那么第一个参数也是double型的,而且返回值也是double型的,注意下。还有化解的时候num * log10(num)...
阅读全文
posted @
2012-02-12 15:33
cchun
阅读(244)
推荐(0)
HDU1071_数学几何
摘要:题目大意: 给你三个点p1,p2,p3,p1是最高点,然后算出面积。解题思路: 我的解题思路有点水,就是直接求抛物线系数,直线系数,最后求积分搞定e.尽量少用中间变量吧。代码有点丑。虽然这道题目是1a,但是还是有点儿毛毛的,就是怕三个点重合在一起,但是好像没有这种情况,测试数据应该还是比较弱吧。哈哈~自言自语: 一开始都懒得去用笔化简,但是画出来的时候,真爽,复杂的计算过程都由...
阅读全文
posted @
2012-02-12 11:27
cchun
阅读(330)
推荐(0)
HDU1683_寒假第二场1002
摘要:题目大意: 给你一个目标串,还有一个给定的序列,不过给定的序列有两串相同长度的,是对立的,相应位置可以翻过来(‘*’可以代表任意一个字符),然后要目标串从左往右依次(依次很重要)可以再给定序列中找到。解题思路: 从给定串中从左往右扫描就行了。只需两个循环。吐吐槽: 一开始没有理解好题意,没有看到依次两个字,然后就yy,写了100多行的代码,好吧,最后再调试样例那里才看到原来是有依...
阅读全文
posted @
2012-02-12 10:04
cchun
阅读(142)
推荐(0)
HDU1687_数学几何
摘要:题目大意: 给你一个光源的坐标,然后给你n条线段,然后由于有光源,线段会在x轴上产生阴影,注意线段只在x轴上,而且线段在的横坐标在[-100,100].解题思路: 求出每天线段产生的阴影的区间,然后对区间排序,按区间的头部排序即可,然后用一个max标志扫过的区间的末尾最长点,之后比较区间头与max即可,算出count.吐吐槽: 好吧,我承认我自己弱,可是最后发现,我弱得有点离谱,...
阅读全文
posted @
2012-02-12 00:38
cchun
阅读(151)
推荐(0)
HDU1863_Kruscal_并查集
摘要:吐槽: 昨晚一点多的时候写,老是错,老是调试,调了很久还是没调试出来,唉,太久没写过,都这么菜了,早上10点多大脑清醒,重新写了一遍,就1a了,还是早睡早起来写代码好点儿。题目大意: 经典的畅通工程,再经典不过的并查集了。很久以前用prim写过,这次换换并查集,果然,并查集思路还是简单一点啊。解题思路; 用并查集写kruscal.代码:#include#includeusing...
阅读全文
posted @
2012-02-11 10:31
cchun
阅读(329)
推荐(0)
HDU3363_贪心
摘要:解题大意: 给你一个串,串中有H跟T两种字符,然后切任意刀,使得能把H跟T各自分为原来的一半。解题思路: 把串想象成一个环,只要满足H跟T都为偶数个,那么就可以做一条过圆心的直线把H跟T平分掉,过直线,只要考虑平分H或者T中的一个就可以了,因为直线本来就把环平分,而此时平分了H或者T,那么剩下的那个也是平分掉的。代码:#includeusing namespace std;int ma...
阅读全文
posted @
2012-02-10 02:04
cchun
阅读(310)
推荐(0)
HDU2171_输入处理_点名字
摘要:题目大意: 给你一组人名,然后指定从哪个人名开始计数,注意人名是围城一个圈的。然后要求打印出点到名字的人的名字。解题思路: 用map存放人名,(用两个map逆着存,这样方便取,方便转换)。之后靠模数的方式来取数。模的时候处理了半个小时。困了,脑筋转不动了。代码:#include#include#includeusing namespace std;const int MAX = 100...
阅读全文
posted @
2012-02-08 02:34
cchun
阅读(178)
推荐(0)
HDU_2164
摘要:题目大意: 石头剪刀布,谁赢多,谁就胜利。解题思路: 纯模拟。#includeusing namespace std;int judge(char a ,char b){ if((a == 'P' && b == 'R') || (a == 'S' && b == 'P') || (a == 'R' && b == 'S')) return 1; else if((a == 'R...
阅读全文
posted @
2012-02-08 00:36
cchun
阅读(184)
推荐(0)
HDU2160_数学题_fibonacci
摘要:题目大意: 话说现在猪肉价格这么贵,著名的ACBoy 0068 也开始了养猪生活。说来也奇怪,他养的猪一出生第二天开始就能每天中午生一只小猪,而且生下来的竟然都是母猪。不过光生小猪也不行,0068采用了一个很奇特的办法来管理他的养猪场:对于每头刚出生的小猪,在他生下第二头小猪后立马被杀掉,卖到超市里。假设在创业的第一天,0068只买了一头刚出生的小猪,请问,在第N天晚上,0068的养猪场里还...
阅读全文
posted @
2012-02-07 23:59
cchun
阅读(155)
推荐(0)
HDU2163_判断字符串是否为回文_速度较慢
摘要:判断长度50以内的字符串是否为回文串#includeusing namespace std;const int MAX = 55;bool isPalind(char str[]){ int len = strlen(str); for(int i = 0, j = len-1; i
阅读全文
posted @
2012-02-07 21:30
cchun
阅读(218)
推荐(0)
HDU2112_HDU Today_有地名的最短路_map+SPFA
摘要:题目大意:一般的经典的最短路,只是点用名字来表示而已。解题思路:用静态邻接表+SPFA+map搞定的,注意边的个数是10000,但是由于是无向边,所以const int MAXE = 2*10005;小细节问题。还有用map只能输出最短路,但是很难打印出路径,待改进。中途写SPFA的时候坑爹了一下,忘了arrDis[s] = 0了,没有把起点的标志为0,结果调试了好久,再加上上面一个RE。第二次才...
阅读全文
posted @
2012-02-07 20:08
cchun
阅读(176)
推荐(0)
自己写的SPFA模板(可打印路径)
摘要:自己写的SPFA模板,可以打印路径。(用静态链表实现的,(静态链表应该不用自己判断重边吧?待验证))#include#include#includeusing namespace std;const int MAXE = 10005;const int MAXV = 105;const int inf = 10000000;typedef struct node{ int s, t, w, nex...
阅读全文
posted @
2012-02-07 16:59
cchun
阅读(206)
推荐(0)
HDU1053_田忌赛马
摘要:题目大意: 田忌赛马,每输赢一局的赌注为200,n为一方的马数量(双方马一样多),且最大为1000.解题思路: 具体解题思路如下:(这段思路是看别人的) 1.当田忌最慢的马比齐王最慢的马快,赢一场先。因为始终要赢齐王最慢的马,不如用最没用的马来赢它。 2.当田忌最慢的马比齐王最慢的马慢,...
阅读全文
posted @
2012-02-07 02:37
cchun
阅读(258)
推荐(0)