自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

llin-黎辰

虽然弱,却执着

  • 博客(62)
  • 资源 (5)
  • 收藏
  • 关注

原创 codeforces 580D. Kefa and Dishes(状压dp)

题目链接:codeforces 580D题目大意:给出n个物品,选出m个,如果有两个物品存在一条有向边,那么获得这条边的边权,每个点有一个点权,问如何选取能获得最多的权值。题目分析:因为数据量比较小,所以采用的是状态压缩.定义dp[s][i]表示在状态s(记录某个物品选或没选)下第i个物品作为最后一个选取的物品的最大值,那么转移很简单,就是如果存在有向边,那么就加点权与边权,否则就只加点权。 A

2015-09-30 19:51:41 925

原创 DL Code Editor user manual

1. Introduction1.1 PurposeIntroduce how to use the function of the editorHelp the developers to get familiar with the details of the programHelp users to configure the editor to suit their requirem

2015-09-30 18:36:42 1304

原创 codeforces 461B B. Appleman and Tree(树形dp)

题目链接:codeforces 461B题目大意:给出一棵树,每个点是白色或者黑色,问有多少种方案能够通过去掉一些边使每个联通块中只有一个黑色的点。题目分析:定义状态dp[i][0…1]表示点i在以点i为根的子树中去掉边后点i所在的联通块有黑点(1)和没有黑点(0)的方案数。那么我们对于点u,首先考虑它的颜色,如果是黑色,那么dp[i][1] = 1 , 否则d

2015-09-24 13:23:02 2778

原创 codeforces 201A A. Clear Symmetry(数论+构造)

题目链接:codeforces 201A题目大意:给出一个x,求一个边长最小的正方形矩阵,这个矩阵是01矩阵,且满足元素上下对称,左右对称,问构造出1的个数是x的矩阵最小的边长是多少。题目分析:首先我们能够发现若n-1构造的最大数比n构造出的最大数要大(n为偶数时)。然后我们知道对于每个奇数,能够构造出的最大数是n2+12\frac{n^2+1}{2}然后对于每个正方形矩阵,在横中轴线和纵中轴

2015-09-23 11:31:01 1474

原创 codeforces 191A A. Dynasty Puzzles(dp)

题目链接:codeforces 191A题目大意:给出n个字符串,两个字符串如果前一个的尾与后一个的首相同,那么可以相连,最后得到的字符串要满足首尾相同,问最长的符合要求的字符串的长度是多少。题目分析:定义状态dp[i][j]代表以i开头以j结尾的最长的字符串的长度,具体转移看代码,水题不解释。 AC代码:#include <iostream>#include <cstring>#includ

2015-09-23 10:32:49 1232

原创 codeforces 219D D. Choosing Capital for Treeland(树形dp)

题目连接:codeforces 219D题目大意:给出一棵树,但是它的边是有向边,选择一个城市,问最少调整多少条边的方向能使一个选中城市可以到达所有的点,输出最小的调整的边数,和对应的点。题目分析:定义dp[u]为以u为根的子树中要使根都可达,需要调换方向的边的条数。定义dir[v]记录点v到父亲节点的边的方向。然后就是将每个点提成根的操作了。dp[u]换成新的定义,以u为根的到达整棵树需要

2015-09-23 10:28:23 2064

原创 codeforces 148D D. Bag of mice(概率dp)

题目链接:codeforces 148D题目大意:给出w只白老鼠,b只黑老鼠,公主和龙轮流取老鼠,公主先手,龙取老鼠时会吓跑一只老鼠,先取出白老鼠的人赢,如果没人取到白老鼠,那么龙赢。问公主赢的概率。题目分析:首先定义状态dp[i][j]表示第i次取老鼠时剩余黑老鼠为j的概率。那么最后结果就是∑i为奇数∑j=0bdp[i][j]\sum_{i为奇数}\sum_{j=0}^bdp[i][j]那么

2015-09-22 21:29:29 1219

原创 codeforces 255C C. Almost Arithmetical Progression(dp)

题目链接:codeforces 255C题目大意:给出一个序列,求最长的子序列,满足隔位的两个数相等,问这个最长的子序列的长度是多少。题目分析:定义状态dp[i][j]代表以第i个数为末尾,第j个数为倒数第二个的情况下的最长子序列。转移的方法很简单:dp[i][j]=dp[j][k]+1(a[k]==a[i])dp[i][j] = dp[j][k] +1 (a[k] == a[i])其中k的找

2015-09-22 19:39:26 1470

原创 codeforces 505C C. Mr. Kitayuta, the Treasure Hunter (dp)

题目链接:codeforces 255C题目大意:给出30000个岛,有n个宝石分布在上面,第一步到d位置,每次走的距离与上一步的差距不大于1,问走完一路最多捡到多少块宝石。题目分析:首先容易想到最暴力的方法:定义状态dp[i][j]代表到达i位置上一步的大小是j的情况下最多捡到的宝石数。按照题意模拟即可但是这样在时间和空间上都是不被允许的机智的人会发现,因为只有30000个点,所以步幅的

2015-09-22 18:31:06 1488

原创 codeforces 294B B. Shaass and Bookshelf(dp)

题目链接:codeforces 294B题目大意:给出n本书,每本书有长和宽,先立着放一排,然后在顶上再倒着放,问立着放的这一排最短的距离是多少。题目分析:定义状态dp[i][j][k]表示第i本书构成立着排长度为j,横着的排长度为k的情况是否存在。转移方程很简单,见代码。 AC代码:#include <iostream>#include <cstring>#include <cstdio>

2015-09-22 17:22:33 1251

原创 codeforces 375B B. Maximum Submatrix 2(dp)

题目链接:codeforces 375B题目大意:给出一个01矩阵,行与行之间可以互换位置,问能够得到最大的全1矩阵的面积。题目分析:我们有一种模型,就是对于不互换行的01矩阵求最大面积,就是固定子矩阵的右下角,记录h[i][j]就是当前位置的高度,然后向左延展的距离,枚举所有的即可。代码如下:#include <iostream>#include <cstring>#include <c

2015-09-22 11:08:43 1726 2

原创 codeforces 455B(博弈+dp)

题目链接:codeforces 455B题目大意:给出n个字符串,进行k次游戏,每次游戏输家下次作为先手,游戏规则为每次放一个字母,导致当前构造的字符串是给定的任意一个字符串的前缀,不能操作时为输,赢得第k次比赛的人会取得最终的胜利,问两人都采取最优策略的情况下,谁会赢得比赛。题目分析:首先针对这种字符串的问题我们很容易会想到利用字典树来解决,方便多模式匹配。然后我们就能想到,这其实就是一个在树

2015-09-22 10:01:19 1838

原创 codeforces 269B B. Greenhouse Effect(dp)

题目链接:codeforces题目大意:给出一个实数轴,上面散布着n个点,他们是m种,问最少挪多少步能将数轴上的点分成1~m的种类顺序排列的m块。题目分析:首先我们能够知道,一定存在策略将某个点一次就放到它应该放的位置。所以对于我们要动位置的植物,我们最多对于每个植物只需要动一次,定义状态dp[i]代表前i个植物,要保证升序的情况下最多保留的植物的个数。转移方程很明显,dp[i]=max{dp

2015-09-22 08:19:09 1556

原创 codeforces 463D D. Gargari and Permutations(dp)

题目链接:codeforces 463D题目大意:给出k个排列,问这k个排列的最长公共子序列的长度。题目分析:第一次做这种排列的dp,感觉学到了一种新的定义状态的方法。首先我们要记录pos[i][j]代表第i行数j出现的位置。cnt[i]记录当前扫过的范围内数i出现的次数 。dp[i]表示以数i结尾的最长公共子序列的长度。我们首先遍历的是序列的长度,然后每次扫描每一行上的数,更新cnt[i

2015-09-21 19:02:48 1433

原创 codeforces 351A A. Jeff and Rounding(智商题+枚举)

题目链接:codeforces 351A题目大意:给出2*n个数,n个向上取整,n个向下取整,求新的数的和与原始的数的和的最小差距。题目分析:机智的人会发现,先对所有的数的小数部分取和,然后如果出现一个向上取整的,那么sum的变化一定是1,所以只和向上取整的数的个数有关系,而向上取整和向下取整的个数已经确定,只有存在小数部分是0的情况的时候,值会不同,因为它转换为向上取整和向下取整的值是不变的。

2015-09-21 17:04:14 817 1

原创 codeforces 479E E. Riding in a Lift(dp+段修改的优化)

题目链接:codeforces 479E题目大意:给出一栋n层的楼,初始在a层,b层不能去,每次走的距离必须小于当前位置到b的距离,问用电梯来回乱跑得到的序列有多少种。题目分析:定义状态dp[i][j]表示第i次乱跑跑到了j的方案数。定义dis等于|j-b|那么我们每次转移dp[i][j]能够转移到[j-dis,j+dis]但是我们要把当前位置去掉,也就是修改两段,我们采取段首加值,段尾减值

2015-09-21 14:45:37 1266

原创 codeforces 577B B. Modulo Sum(背包+dp)

题目链接:codeforces 577B题目大意:给出n个数,求是否存在一个子集,这个子集中的数的和能够整除m题目分析:定义状态dp[i][j]代表利用前i个数是否能够得到对m取模得j。转移的过程采取背包的方法,很水但是直接做一定会超时,O(n⋅m)\mathcal{O}(n \cdot m)利用鸽巢定理可以知道,当n>m时,有n个数便有n个前缀和,而n%m只有m-1个值,所以至少有两个余数

2015-09-21 13:17:47 2221

原创 codeforces 274B B. Zero Tree(树形dp)

题目链接:codeforces题目大意:给出一棵树,每个点有权值,每次操作可以对一个联通子集中的点全部加1,或者全部减1,且每次操作必须包含点1,问最少通过多少次操作可以让整棵树每个点的权值变为0.题目分析:定义状态up[u],down[u]代表点u被加操作的次数和点u被减操作的次数因为必须包含点1,所以我们将树的根定在点1,那么对于每一点的子树中点,如果要修改的话,那么一定会经过当前这个点,因

2015-09-21 10:26:08 2230

原创 codeforces 5C C. Longest Regular Bracket Sequence(dp)

题目链接:codeforces 5C题目大意:给出一个括号的序列,求最长的合法的子序列。题目分析:定义dp[i]表示第i个位置的右括号结尾的合法序列的左边界定义lef[i]表示第i个位置的右括号匹配到的左括号的位置利用栈进行模拟,可以得到lef[i],dp[i]的转移方程如下:dp[i]=dp[lef[i]−1](s[lef[i]−1]==′)′)dp[i] = dp[lef[i]-1](s[

2015-09-20 20:15:11 1373

原创 ubuntu 14.04 更新源

# deb cdrom:[Ubuntu 14.04 LTS _Trusty Tahr_ - Release amd64 (20140417)]/ trusty main restricted# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to# newer versions of the distribu

2015-09-18 17:13:42 733

原创 codeforces 416C C. Booking System(贪心)

题目链接:codeforces 416C题目大意:给出n个请求,每个请求包括客人数量和支付金额,再给出m个桌子,包括桌子大小,问如何安排才能最大盈利。给出最大盈利和一个能够最大盈利的方案。题目分析:采取如下的贪心策略,首先将请求按照支付金额从大到小排序,如果支付金额相同,按照人数从小到大排序,然后我们选取桌子中符合要求最小的桌子,这样就能得到最优方案。那么对于我们选取的这张桌子,是我们选取当前请

2015-09-18 14:53:10 1500

原创 codeforces 295B B. Greg and Graph(floyd+dp)

题目链接:codeforces 295B题目大意:给出n个点的完全有权有向图,每次删去一个点,求每次操作前整张图各个点的最短路之和。题目分析:首先删边对于我们来说是不好做的,所以我们想到了通过加点的方式逆向地做,那么加点怎么做呢?其实就是一个我们很熟悉的算法:floyd,因为我们通常用的都是它的简化版本,所以可能很多人并不理解它的确切的思想。在介绍这道题的具体解法之前,我先解释一下floyd,

2015-09-18 11:53:42 1960 1

原创 codeforces 225C C. Barcode(dp)

题目链接:codeforces 225C题目大意:给出一个矩阵,包含两种颜色,问最少修改多少个点才能让每一列的颜色一致,且颜色一致的连续的列的长度在x和y之间。题目分析:首先我们需要统计出每一列调整为全黑列和调整为全白列的花费,然后定义状态dp[i][j][k]为当前处理到第i列,当前颜色为k,连续的列的长度为j的情况下的最小花费。然后转移很简单:⎧⎩⎨dp[i][1][k]=mint∈[x,

2015-09-17 11:35:11 748

原创 codeforces 279C C. Ladder(rmq+预处理)

题目连接:codeforces 279C题目大意:给出一个序列,m次查询,每次给出一个子串,问这个子串是否满足,中间能够找到一个元素,让这个元素作为前后分别单调的分界.题目分析:首先对于每次查询,我们知道分界一定是最大的元素,所以我们可以用rmq预处理出区间最大。然后为了判断这个区间是否能够通过最大的元素作为分界点而前后单调,我们可以通过预处理,正向和反向分别扫一遍,记录某一个点的为最大元素的能

2015-09-17 10:42:49 1856

原创 codeforces 204A A. Little Elephant and Interval(dp+组合数学)

题目链接:codeforces 204A题目大意:给出一个l和r,求取在l和r之间的首尾相同的数的个数。题目分析:按位进行统计,计算出不大于某一个数的所有的合法的情况。然后可以利用这个前缀和求取区间和。按位统计的时候,首先特判数的长度为1位和两位的情况,分别是10和9,如果当前数就是1位,那么就是这个数的大小,其他具体细节见代码.然后就是统计所有不足位的情况,也就是数的长度不到给定数长度的情况

2015-09-17 10:01:09 1630

原创 codeforces 276D D. Little Girl and Maximum XOR(贪心+dp+数论)

题目链接:codeforces 276D题目大意:给出l和r,用l和r之间的两个数取亦或,求得到的结果最大是多少。题目分析:首先我们想,为了让结果最大,肯定式尽量让高的位出现1,因为高的位出现1的情况是大于当前位是0且后面所有位都是1的情况的,那么我们就可以贪心的知道肯定是保证高位上的1先出现。然后我们可以想,让某一位出现1,那么就是选择一个数这一位是1,一个数这一位是0,然而我们为了让最后这两

2015-09-16 22:52:31 1706

原创 codeforces 429B B. Working out(dp)

题目链接:codeforces 429B题目大意:给出一个矩阵,一个人从左上角走到右下角,一个人从左下角走到右上角,两个人只会在一个点相交,问两个人经过路径上的数的和最大的情况下最大和是多少。题目分析:可以分别从四个角出发进行动态规划,dp[k][i][j]代表从第k个角出发到达i和j得到的最大的数。枚举每一个点,然后枚举从四个角同时到大这个点的情况,只能是左上角从左侧或上侧到,右下角从右侧或下

2015-09-16 21:25:58 2727 1

原创 codeforces 161D D. Distance in Tree(树形dp)

题目链接:codeforces 161D题目大意:给出一棵树,每条边的边权是1,问两点之间的路径长度为k的点对有多少个?题目分析:定义状态dp[i][k]代表以i为根的子树中的点到达点i的长度为k的点的个数。定义V为与u相邻的点的集合,p是u的父亲然后转移方程很简单:dp[u][j]=∑v∈Vdp[v][j−1]dp[u][j]= \sum_{v \in V}dp[v][j-1]然后我们利用处

2015-09-16 15:27:10 2055

原创 codeforces 448C C. Painting Fence(分治+dp)

题目链接:codeforces 448C题目大意:给出n个杆子,每个杆子有一个长度,每次可以刷一行或一列,问最少刷多少次可以将整个墙刷成黄色。题目分析:首先我们能够想到,如果横着刷,为了得到最优解,当前刷的位置的下面也必须横着刷,然后对于每种情况都可以通过n次竖着刷得到整个黄色的墙。所以我们采取分治的策略进行动态规划,也就是对于每个状态划分为两种情况讨论,如果要刷横向的话,最矮要刷到最矮的柱子的

2015-09-16 13:19:11 2057

原创 codeforces 385C C. Bear and Prime Numbers(线性筛素数)

题目链接:codeforces 385C题目大意:给出n个数,数据范围10710^7,给出m次查询,每次给出l,r求在l和r之间的素数的∑ki=0f(pi)\sum_{i=0}^kf(p_i),f(pi)f(p_i)定义为n个数中能够整除pip_i的个数。题目分析:直接线性筛素数,记录每个数最大的素因数,然后统计对于每个素因数对应的f(pi)f(p_i),然后求取前缀和,来方便求取区间和。AC代码:

2015-09-15 23:43:16 1643

原创 codeforces 234C C. Weather(枚举+前缀后缀预处理)

题目链接:codeforces 234C题目大意:给出一个序列,问最少修改多少个元素,能保证前半截全是负数,后半截全是正数。题目分析:预处理出前缀中大于等于0的数的个数和后缀中小于等于0的数的个数。枚举每一个位置,判断以当前位置为分界点时需要修改的元素的个数。 AC代码:#include <iostream>#include <cstring>#include <cstdio>#inclu

2015-09-15 18:23:49 977

原创 codeforces 340D D. Bubble Sort Graph(dp+线段树)

题目链接:codeforces 340D题目大意:给出一个程序,就是冒泡排序,每次如果发现相邻两个数前一个大于后一个,交换位置后建边,问最后得到的这个图中的最大独立集,这个最大独立集定义为所有的点都不相邻的最大点的集合的规模。题目分析:首先我们可以知道对于a[i],它只会且一定会与后面的比它小的建边,所以我们只需要固定第一个点,然后找最长上升子序列即可。(这样能够保证没有相邻的点)定义状态dp[

2015-09-15 16:43:32 1139

原创 codeforces 219C C. Color Stripe(dp)

题目链接:codeforces 219C题目大意:给出一个字符串,只包含k种字符,问最少修改多少个字符(不增长新的种类)能够得到一个新的字符串,这个字符串满足相邻的字符没有相同的。题目分析:定义状态dp[i][j]表示包含前i个字符的子串符合要求后最后一个字符是k时的最少需要修改的字符个数。然后转移方程很简单:dp[i][j]={min(dp[i−1][k]+1)(k≠j&&s[i]≠j)min

2015-09-15 15:49:02 1123

原创 codeforces 407B B. Long Path(dp)

题目链接:codeforces 407B题目大意:要求从1走到n+1,有两种行进方式,第奇数次到达i点时需要走到p[i]位置,第偶数次到达i点时走到i+1位置,问到达n+1需要走多少次。题目分析:定义状态dp[x][y]为从x走到y需要走多少次。状态转移方程如下:dp[i][j]=dp[i][j−1]+dp[p[j−1]][j−1]+1dp[i][j] = dp[i][j-1] + dp[p[j

2015-09-15 11:56:41 1272

原创 codeforces 4D D. Mysterious Present(dp)

题目连接:codeforces 4D题目大意:给出n个信封,这n个信封有长和宽,给出卡片的尺寸,求取能够装入卡片的最长的序列,序列满足后一个的长和宽一定大于前一个,求最长的这个序列的长度,并且给出一组可行解。题目分析:一看这种题目就是dp的题目,状态定义dp[i]为以i结尾的序列的最大的长度,并且利用一个数组记录得到最优解的路径,采取链表的形式进行存储。首先对给出的信封进行排序,按照宽为第一关键

2015-09-15 10:14:01 1581

原创 codeforces 339C C. Xenia and Weights(dp)

题目链接:codeforces 339C题目大意:给出砝码,砝码给定大小,是1-10中的任意个,每种砝码数量不限,问能否在轮流在天平两侧放砝码,每次保证用到的砝码和上一次不同,且当前放置砝码的一侧会因为这次放置重量超过另一侧,问能否进行m次操作,如果能,输出任意一种方案。题目分析:一个不算难的dp,状态定义为dp[i][j][k]代表在第i次放置采用大小为k的砝码放置后比另一侧大的重量数为j的方案

2015-09-15 09:05:45 1039

原创 codeforces 2B B. The least round way(dp+数论)

题目链接:codeforces 2B题目大意:给出一个n*n的矩阵,从左上角走到右下角,只能向右或向下走,问路径上的数之积末尾0最少的方案是什么。题目分析:首先我们要做两个预处理,处理出每个位置上的数包含多少个2的质因子和多少个5这个质因子然后我们统计路径上弄到最少的2的方案数和最少的5的方案数。这个转移方程很简单:定义dp[i][j]为走到点[i,j]时最少弄到给定质因数的个数,a[i][j

2015-09-14 22:08:36 2598

原创 codeforces 126B B. Password(kmp+dp)

题目链接:codeforces 126B题目大意:给出一个字符串,找出一个子串既是它的前缀,也是它的后缀,还是一个非后缀也非前缀的子串。题目分析:本来挺简单的一个题,最开始想复杂了,还用了后缀数组,醉了。这个题主要用的是kmp的next数组,首先我们要了解next数组的定义,next[i]表示以i为末尾的子串的后缀与能够匹配的整个串的最长的前缀。然后我们可以知道后缀与前缀的最长相同的长度,现在

2015-09-14 19:50:21 2688

原创 codeforces 118D D. Caesar's Legions(dp)

题目链接:codeforces 118D题目大意:给出n1n_1个1,n2n_2个2,给出k1k_1和k2k_2代表连续的1和2的最大长度,问能够构造的合法的不同串的数量。题目分析:能够递推,所以想到能够利用dp做。首先我们定义状态,dp[i][j][k][2]代表以1或2结尾,结尾相同的元素的数量为k,1的总数是j的当前序列长度为i的串的数量。首先是对状态进行初始化,dp[1][1][1][

2015-09-13 21:06:36 1843 1

原创 hdu 5442 长春区域赛网络赛 1006 Favorite Donut(后缀数组)

题目链接:hdu 5442题目大意:给出一个环,每颗珠子有一个甜度,选择第一个珠子和吃的方向,问得到的吃珠子的字符串的字典序最大的,如果有多个,选取位置最靠前的,如果还是多个,选择顺时针吃的。题目分析:-首先构造一个字符串,首先正着按环吃,那么就是字符串正着写两遍,连接在一起;中间用没有出现过的字符连接,然后逆时针吃的,也就是反着写两遍连在一起。 - 然后我们找到后缀排序前面与排序第一个的公共前缀

2015-09-13 15:50:46 1258 2

Java PathFinder-jpf-core

一个基于符号执行的Java执行模型路径查找器

2016-05-14

apache-commons-logging

apache-commons-logging

2016-05-01

apache-commons-digester

2016-05-01

vim-配色方案

比较大众的配色方案,欢迎大家下载,如果不好用可以评论中指出,我会修改

2014-12-15

api-demos-source codes

适合初学者看,方便sdk中不带源码的人群

2014-12-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除