摘要: 转帖自 http://xuyemin520.is-programmer.com/posts/26317.html还有 http://hi.baidu.com/a363310925/blog/item/aced542d719b2b5d4fc22695.html题意:M+N个人排队买票,票的单价是50¥,每个人只能买一张。 M个人拿50的去买,N个人拿100的去买,然后悲剧的是售票处开始的时候没有钱,所以如果拿100块买票人前面的拿50块买票的人小于或者等于用100块买票的人,这种排队方式就不合法,也就是不能顺利全部都买到票(因为没零钱找了)!卡特兰数的应用该题的公式:(C(m+n, n)-C(m 阅读全文
posted @ 2011-09-08 22:28 枕边梦 阅读(225) 评论(0) 推荐(0) 编辑
摘要: hdu 1267 下沙的沙子有几粒?参考自大牛http://www.wutianqi.com/?p=2642分析,这题其实是H和D的组合排列问题,只不过要考虑期间累计的H和D的数量关系。用DP来做,可以推导出:dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[][]前一个表示H的数量,后一个表示D的数量。分上面那种情况是因为最后一个必然是H或者D,而此时可以考虑把新加的一个放在最后,因为假如加的是H,如果加在[i-1][j]中加入H,则最后一个依然是H或D,此时如果成立,那么依然属于[i-1][j]或[i][j-1]的情况。所以推导出此递推关系。#include< 阅读全文
posted @ 2011-09-08 20:25 枕边梦 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 嘿嘿,转帖的代码,感觉简单明了大数乘法来的,不过要注意的问题还真多#include <stdio.h>#include <string.h>void times(char *a,char *b,char *t) //大数乘法,a和b相乘,结果赋给t{ int len_a=strlen(a),len_b=strlen(b); int c[10]={0},d[200]={0},e[200]={0}; for(int i=0;i<len_a;i++) c[i]=a[len_a-1-i]-'0'; for(int i=0;i<len_b;i++) d 阅读全文
posted @ 2011-09-08 15:15 枕边梦 阅读(188) 评论(0) 推荐(0) 编辑
摘要: hdu 1997汉诺塔题目分析:转自:http://lcc3536.blog.163.com/blog/static/132469917201132283640123/1) 最初我们要判断一下是不是已经完全放好了,这样就不用考虑是不是最优化了, 因为都已经放好了,肯定是最合法的! 或者说全部在 A 上,这是还没开始动作的一个状态,所以也是合法的!2) 否则我们 要对每次状态的最大的那个进行判断,因为我们知道,汉诺塔最大的那个不可能停在 B 上,(假设 最初的时候都在 A 上,要移到 C 上去!),只可能在 A 或者 C 上面!如果是放在 B 上面,停止判断,直接断定他非法~这样我们得出了第二个 阅读全文
posted @ 2011-09-08 11:41 枕边梦 阅读(1003) 评论(0) 推荐(0) 编辑