摘要: 递推,卡特兰数题意:输入n,表示圆上有n对点也就是2n个点,每个点要与另一个点且只能与一个点相连,用直线将两点相连,那么会产生n条线,但要求这n条线不能出现相交的情况,问有多少种连接方案这个问题并不难,首先我们固定一个点,让它与另外的任意一个点连接,那么这个圆将被分成两份,我们暂且把这条线称为分界线,而两边各有一些点。我们可以很容易的发现,如果一边的点的个数为奇数,那么这一边无论怎么连,都必将剩下一个点没有被连接,这个点一定要越过分界线,也就是一个会出现相交。由于一边是奇数个点,另一边也肯定是奇数个点,会出现相同的情况所以我们得到一个策略,分界线不能随便选,它一定要保证两边的点的个数均是偶数。 阅读全文
posted @ 2013-02-23 16:25 Titanium 阅读(1531) 评论(0) 推荐(0) 编辑
摘要: 递推/*递推我们要怎么得到n呢,可以考虑n-1的情况,在n-1的情况下我们只需要再放一个2*1的方块即可接着可以考虑n-2的情况,我们可以放入一个2*2的方块即可,或者放入2个2*1的方块接着我们可以考虑n-3的情况,可以放入3个2*1,或者1个2*2和1个2*1,或者1个2*1和1个2*2然后会发现,这样子就重复,n-3的这些情况其实就是n-1和n-2加起来的情况所以可以n只决定于n-1和n-2,易知递推公式为dp[n]=dp[n-1]+2*dp[n-2]*/#include <cstdio>#include <cstring>#define LEN 1010#def 阅读全文
posted @ 2013-02-23 12:51 Titanium 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 线段树题意:输出N,T,M,表示总区间长度([1,N]),有T种颜色(1到T表示),接下来有M个操作。C,a,b,c类型的操作是成段更新,把区间[a,b]的颜色改为c。P,a,b类型的操作是询问区间[a,b]有多少种不同的颜色分析都在代码里面了/*成段更新,询问一个区间内有多少种的不同的颜色每次询问之前清空一个颜色的标记数组,然后开始询问,去到一个区间,若val为1说明整段的颜色相同,不用再继续深入,若为0说明颜色不止一种要继续深入。每次val为1时要判断这个颜色col是否已经被记录,只有没被记录的才能计数,而且要记录该颜色已经被用过至于成段更新,要用到LAZY。到达目标区间后不要再继续深入。 阅读全文
posted @ 2013-02-23 11:02 Titanium 阅读(193) 评论(0) 推荐(0) 编辑