上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 32 下一页
摘要: 线段树一样的题目http://www.cnblogs.com/scau20110726/archive/2013/02/24/2923923.html 阅读全文
posted @ 2013-02-24 00:44 Titanium 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 线段树(经典题)离散化+成段更新+区间统计题意:先输入case数,每个case输入n,表示下面有n个海报,每行就是海报的左右坐标,第i个海报的颜色为i。一面墙长度固定为10000000,问这些海报贴上去后能看到多少种颜色这个问题的难处其实是怎么离散化(也就是映射,映射后就是简单的线段树整段更新,最后区间询问)。今天第一次学离散化,说说个人的解法方法是和别人的大概一样的,可能代码实现有些不同,我的代码可能空间开销更大些(后来查看代码,很多空间能省略,但是下面的代码是我最原始的代码,并没有后来的优化,就以此来讲解)。int s[MAXN][2]; 保存原始的数据,[0]是起点坐标,[1]是终点坐标 阅读全文
posted @ 2013-02-24 00:43 Titanium 阅读(1774) 评论(0) 推荐(0) 编辑
摘要: 递推,卡特兰数题意:输入n,表示圆上有n对点也就是2n个点,每个点要与另一个点且只能与一个点相连,用直线将两点相连,那么会产生n条线,但要求这n条线不能出现相交的情况,问有多少种连接方案这个问题并不难,首先我们固定一个点,让它与另外的任意一个点连接,那么这个圆将被分成两份,我们暂且把这条线称为分界线,而两边各有一些点。我们可以很容易的发现,如果一边的点的个数为奇数,那么这一边无论怎么连,都必将剩下一个点没有被连接,这个点一定要越过分界线,也就是一个会出现相交。由于一边是奇数个点,另一边也肯定是奇数个点,会出现相同的情况所以我们得到一个策略,分界线不能随便选,它一定要保证两边的点的个数均是偶数。 阅读全文
posted @ 2013-02-23 16:25 Titanium 阅读(1514) 评论(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 阅读(332) 评论(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 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。也是就说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。————————————————————————————————————求解一个序列逆序 阅读全文
posted @ 2013-02-22 23:30 Titanium 阅读(695) 评论(0) 推荐(0) 编辑
摘要: 线段树 or 树状数组 or 归并排序一个关于逆序数的问题。输入n,下面给出n个数字,分别是0到n-1,顺序不定。问你逆序数是多少?逆序数就是逆序对的个数,所谓逆序对,就是一个序列中任取两个数字,若i<j,a[i]>a[j],则称a[i]和a[j]是一个逆序对,好像3,1,4,2,逆序对有(3,1),(3,2),(4,2),所以逆序数为3但题目还没完,它还需要移动,每次将序列的第一个元素放在序列的最后,得到的新序列再求一次逆序数,可知一个长度为n的序列这样的移动可以做n-1次,可以得到n-1个新的序列,(第n次的话就会变回原始的序列)。然后问你,原序列和n-1个新序列中最小的逆序数 阅读全文
posted @ 2013-02-22 20:29 Titanium 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 最短路 OR 搜索这题大多数是归为图论题,求最短路径,看了一下题目,确实是这样的意思,但是我却很难想到怎么最短路。后来觉得搜索更形象易懂所以写了一个dfs,但是wa,然后看了一下解题报告才发现有个地方理解错题意了。根据题意做了小修改就过了题意:其实就是找一条最短路径,但是路径中任意两个点的等价差不能超过限制值(我一开始的理解是两个直接相连的点的等级差不能超过限制值)/*建图:一个物品就是一个点,一个物品能容另一种物品来换,那么就是两个物品间可能相连,为什么是可能,因为还要两个物品的等级满足条件。因为物品数上限为100,用邻接矩阵来建图方便。再注意一点,这是个有向图,要得到i物品可以用j物品来换 阅读全文
posted @ 2013-02-19 18:45 Titanium 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 最短路变形题意:输入n和m表示图的顶点数和边数然后下面m行给出每条边的信息(无向图)。起点是办公室编号1,终点时家编号2。从1到2,问满足要求的路径条数。要求就是,该条路径经过A点到B点的话,那么经过B点到家的最短路径值要小于A点到家的最短路径值,关于这句话是什么意思,看下面的注释还好是1A了这题,否则的话感觉要调试很久//先以家为源点运行一次dij得到家到每个点的最短路(也就是每个点到家的最短路)//那么从办公室到家的最短路(一条或多条)一定符合题目的要求,因为最短路本身有最优子结构的性质//还有一些路径,不是办公室到家的最短路,但是它符合题目的要求//例如办公室为O,家为H,从O到H的最短 阅读全文
posted @ 2013-02-19 16:14 Titanium 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 递推题意:看题目中的列子就可以知道 ,当n为5时,可行的子集有{1,3,5},{2,4},{2,5},{1,4}1.子集中任意两个元素的差x要2<=x<=3。2.子集要尽可能的长,好像1,3,5,不能是1,3,因为还能加上5然后就是一个很简单的递推,按位递推即可,dp[i]表示用前i个数字能产生多少个子集(并且该子集中包含了第i个元素),那么对于dp[i]来说,决定它的是dp[i-2]和dp[i-3],有第i个元素的子集必定有第i-2个元素或第i-3个元素至于用递推或者记忆化搜索来写都是没问题的#include <cstdio>#include <cstring& 阅读全文
posted @ 2013-02-19 11:21 Titanium 阅读(401) 评论(1) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 32 下一页