2-SAT两题
摘要:看了大白书,学习了一下two-sat,很有意思的算法。题目就是大白书上的两题。 仅仅放一下代码作为以后的模板参考。 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #include <vector> 5 usin
阅读全文
Codeforces Round #402 (Div. 2)
摘要:现场打的,出3题,被rejudge掉B题= =。 A题,水题,两边数量不一样的总和除以4即可。 B题,写挫了,结果少了一个特判。 C题,水题。直接贪心即可。 D题,比赛时没做出来= =。判断b串是a串的子序列是线性的,那么二分答案即可。
阅读全文
BestCoder Round #92
摘要:现场赛就出了一题= =。 A题,水题。但是几天没写代码有点手生,调试了一会才A= =。 B题,考虑到只要连续的四个即可,那么枚举中间的两个即可。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #inc
阅读全文
Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined)
摘要:A题,水题,判断所有点是不是入度和出度都相同即可。 B题, 题意搞懂了就是水题。 C题。一方分数mod k以后有余数,那么另外一方至少需要赢一场。根据这个方法判断即可。 D题,构造题,不会= =。 E题,题意是每次可以选一个节点,把儿子的两条相同长度的链合并成新的一条相同长度的链。问最后是否可以成为
阅读全文
POJ 1051 Jury Compromise ——(暴力DP)
摘要:题目不难,暴力地dp一下就好,但是不知道我WA在哪里了,对拍了好多的数据都没找出错误= =。估计又是哪里小细节写错了QAQ。。思路是用dp[i][j]表示已经选了i个,差值为j的最大和。转移的话暴力枚举当前选那个即可。代码如下(WA的,以后有机会再找找错在哪里吧0.0):
阅读全文
POJ 3616 Milking Time ——(记忆化搜索)
摘要:第一眼看是线段交集问题,感觉不会= =。然后发现n是1000,那好像可以n^2建图再做。一想到这里,突然醒悟,直接记忆化搜索就好了啊。。太蠢了。。 代码如下:
阅读全文
HDU 2859 Phalanx ——(DP)
摘要:感觉是个n^3的dp,只是可能上界比较松吧。。转移见代码。值得注意的一个地方是如果n是1,那么在for里面是不会更新答案的,因此ans要初始化为1。 代码如下:
阅读全文
POJ 3186 Treats for the Cows ——(DP)
摘要:第一眼感觉是贪心,,果断WA。然后又设计了一个两个方向的dp方法,虽然觉得有点不对,但是过了样例,交了一发,还是WA,不知道为什么不对= =,感觉是dp的挺有道理的,,代码如下(WA的): 1 #include <stdio.h> 2 #include <algorithm> 3 #include
阅读全文
POJ 1661 Help Jimmy ——(记忆化搜索)
摘要:典型的记忆化搜索问题,dfs一遍即可。但是不知道WA在哪里了= =,一直都没找出错误。因为思路是很简单的,肯定是哪里写挫了,因此不再继续追究了。 WA的代码如下,希望日后有一天能找出错误= =: ————————————————灵光一闪的分界线—————————————————— 在写博客的时候突然
阅读全文
HDU 1160 FatMouse's Speed ——(DP)
摘要:又是那个lis变形的题目。 但是不好定义严格的比较符号,因此只能n^2去做。值得注意的一个是要先排序,因为可能可以先选后面的再选前面的,先排序的话就能够避免这个问题。但是要注意,因为要输出路径,所以要记录之前的id。 代码如下:
阅读全文
HDU 1114 Piggy-Bank ——(完全背包)
摘要:差不多是一个裸的完全背包,只是要求满容量的最小值而已。那么dp值全部初始化为inf,并且初始化一下dp[0]即可。代码如下:
阅读全文
poj 1458 Common Subsequence ——(LCS)
摘要:虽然以前可能接触过最长公共子序列,但是正规的写应该还是第一次吧。 直接贴代码就好了吧:
阅读全文
HDU 1257 最少拦截系统 ——(LIS)
摘要:想了一下感觉和lis有关,交了果然AC。想不到很好的证明方法,试做证明如下:lis的每一个点都是一个不上升系统中的一员,设其为a[i],那么a[i-1]<a[i]肯定是成立的(lis的性质),夹在这两者之间的一个元素x,如果其>=a[i],那么它肯定属于a[i]这个系统,如果它小于a[i],且:1.
阅读全文
HDU 1074 Doing Homework ——(状态压缩DP)
摘要:考虑到n只有15,那么状压DP即可。 题目要求说输出字典序最小的答案的顺序,又考虑到题目给出的字符串本身字典序是递增的,那么枚举i的时候倒着来即可。因为在同样完成的情况下,后选字典序大的,小的字典序就会在前面,那么整体的字典序就会更小。代码如下:
阅读全文
HDU 1069 Monkey and Banana ——(DP)
摘要:简单DP。 题意:给出若干种长方体,如果摆放时一个长方体的长和宽小于另一个的长宽,那么它可以放在另一个的上面,问最高能放多少高度。每种长方体的个数都是无限的。 做法:因为每种个数都是无限,那么每种按照x,y,z分别重新排列可以得到6种长方体。现在用dp[i]表示选到第i个且第i个必须使用的最大高度,
阅读全文
HDU 1024 Max Sum Plus Plus ——(M段区间的最大和)
摘要:感觉有点奇怪的是这题明明是n^2的复杂度,n=1e6竟然能过= =。应该是数据水了。 dp[i][j]表示前j个数,分成i段,且最后一段的最后一个为a[j]的答案。那么转移式是:dp[i][j] = max(dp[i][j-1], max{dp[i-1][t]}) + a[j],(i-1<=t<=j
阅读全文
Codeforces Round #365 (Div. 2)
摘要:A题,水题。 B题,题意挺简单的,但是要仔细。 C题,以前做过一次,不过这次还是不会= =。具体方法见代码: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #include <iostream> 5 #incl
阅读全文
Codeforces Round #366 (Div. 2)
摘要:A题,水题。 B题,博弈论题,找到的规律是当前数是奇数那么这个子游戏是必败的,否则必胜。那么异或一下即可。 C题,模拟题,考虑到第三个操作如果之前清空到第x条,且当前清空到第t条,如果t比x要小,那么可以忽略清空到t条的操作;另外所有元素最多入队列和出队列一次。那么总的复杂度是O(n)的。代码如下:
阅读全文
Codeforces Round #367 (Div. 2)
摘要:AB都是水题。 C题,DP题。没能够独立的做出来,但是会了以后感觉还是蛮简单的= =。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #include <iostream> 5 #include <m
阅读全文
带权并查集小练
摘要:题目链接:https://vjudge.net/contest/150171#overview。 都是以前做过的并查集题目。只是最近做到了cf的带权并查集,所以又回顾一遍。 B题和之前那题的近义词和反义词那题很像,但是很坑的是这题多组的话会WA! C题,把移动次数看作是距离即可带权并查集啦。
阅读全文
Codeforces Round #368 (Div. 2)
摘要:A题,水题。 B题,一开始看题目觉得蛮复杂的,其实很简单。存好图后找可以储存的点,再遍历这些点附近可以开店的点,维护一下答案的最小值即可。 C题,推不出公式= =。见代码好了: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <strin
阅读全文
Codeforces Round #396 (Div. 2)
摘要:AB都是大水题。 C题,题意稍微有点晦涩。但是还是一个比较简单的dp(虽然我不是独立的做出来的= =)。感觉我dp掌握的不是很好啊;看到这题突然想起前几天碰到的一题:不考虑顺序的整数划分问题。C题代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3
阅读全文
Codeforces Round #376 (Div. 2)
摘要:貌似是之前现场做的ABC。C开始没补。 C题,现在想了一会就会写了。并查集维护为一个root的,它们的颜色变成这个集合中颜色最多的那个颜色即可。 F题,题意是选定一个数字,其他数都变成不大于原来那个数的一个整数倍的数,求最大的所有数的和。做法的话,举个例子就能明白了。比如说当前选定的是5,那么5~9
阅读全文
2017 ZSTU寒假排位赛 #8
摘要:题目链接:https://vjudge.net/contest/149845#overview。 A题,水题。 B题,给出 p个 第一个人的区间 和 q个第二个人的区间,问[l,r]中有多少个整数满足,第二个人的区间范围全部增加这个整数以后 和第一个人的区间有交集。以为是个数据结构题,后来才发现p和
阅读全文
Codeforces Round #371 (Div. 2)
摘要:之前做过E题,是一个DP。 A题,水题,两线段求交集。 B题,set一下判断即可。 C题,水题。但是我写麻烦了,直接转化成二进制再做,比用字符串relize()以后再map要好写得多。 D题,交互题,不做= =。
阅读全文
Codeforces Round #394 (Div. 2)
摘要:A题,水题,但是需要特判"0 0"因为至少至少走了一格= =。 B题,水题,但是补题的时候n=1的情况没考虑(或者说写挫了)导致WA了一发。 C题,数据小,可以直接暴力,用3个数组分别储存每一行变成3种类型的字符需要移动的最少位置。然后三个for来暴力枚举分别由这3行提供3种字符,更新答案即可。代码
阅读全文
全是1的最大子矩阵问题
摘要:前一次寒假排位赛中遇到了这个问题,后来思考了一下。写个类似问题的总结。 这题的模型可以在51nod中找到:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1158。但是其问题规模比较小,n^3暴力似乎都可以。 正解应当是单调
阅读全文
Codeforces Round #395 (Div. 2)
摘要:现场打的。出了ABC,结果B被rejudge。。 A题,水题,找找lcm就行,都不会爆int。 B题,也是水题,我找的一个规律是没错,但是写挫了= =,结果又麻烦,又WA。。其实有更好的规律,只要每隔两个位置swap一下即可。 C题,看别人AC代码很短,,但是不是很理解。。我觉得自己的方法也可以接受
阅读全文
2017 ZSTU寒假排位赛 #7
摘要:题目链接:https://vjudge.net/contest/149498#overview。 A题,水题,直接按照题意模拟一下即可。 B题,我用的是线段树。大力用的差分标记(上次听zy说过,下次再做些类似的题目好了),lyf的方法也不错。 C题,不难发现,00是不能变成其他的,而11可以变成10
阅读全文
Codeforces Round #382 (Div. 2)
摘要:A题,水题。 B题,贪心一发。排序一下,从大到小,先拿个数较少的几个,再拿个数较多的几个即可。证明应该是显而易见的。 C题,本以为log一发即可。但是log的话不能保证深度最深,即不能保证最大分数最大。因此考虑递推,用f[i]表示要得到i分需要的最少的人数,显然要人数最少,最后剩下一个即可。那么要得
阅读全文
Codeforces Round #369 (Div. 2)
摘要:A题,水题,暴力找即可。 B题,水题,但是需要注意n=1的情况。 C题,dp。虽然是个水dp,但是我还是没能够自己独立的写出来。= =太菜了!代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #incl
阅读全文
Codeforces Round #361 (Div. 2)
摘要:我以为这场是昨天没做完的那场= =,结果是以前没做完的一场。。前3题以前做过了。也懒得再看一遍了= =。虽然前面的题感觉再做一遍也不一定做的出的样子- -。不过D和E都是好题,补这场不亏。 D题,题意是问有多少区间,这段区间里面,在a数组中的max和在b数组中的min是相同的。做法是枚举左端点,考虑
阅读全文