摘要: dp本题为special judge,不需要考虑多解情况。f[i][j]表示在选m个人中的选i个人的时候使所有已选中的人的p,d差为j时,所能获得的p,d最大和。f[i + 1][j + p[k] - d[k]] = f[i][j] + p[k] + d[k];(要求k之前没有选过,要查看f[i][j]的完整路径,确保无k)填写完成后,观察f[m]找到最小差值,最大和。知道和差自然可以求出总的p,d。也可以用另一种方法:三维f[i,j,k]表示前i取j差值为k的最大和f[i,j,k]=max{f[i-1,j,k],f[i-1,j-1,k-s1[i]]+s2[i]}我用的第一个:/** * Pr 阅读全文
posted @ 2013-06-02 22:08 hsuppr 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 看了下题解。按长度排序,把长度相差一的,可以转移的连单向边。之后求最长路径。 阅读全文
posted @ 2013-05-29 14:41 hsuppr 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 一眼最小割。主要是高度差不超过d的处理。把(x, y, z) 和 (x - d, y + dir, z + dir) 连边即可,花一下图就理解了。/** * Problem:[HNOI2013]-D2P3 * Author:Shun Yao * Time:2013.5.29 * Result:Accepted * Memo:MaxFlow */#include <cstring>#include <cstdlib>#include <cstdio>const long Maxt = 65605, inf = 0x7f7f7f7f;long h[Maxt], 阅读全文
posted @ 2013-05-29 14:24 hsuppr 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 一看就是高斯消元。但没想到边的期望经过次数=点的期望 / 点的度数官方数据有误。我的代码在gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 下可以过。在 gcc 4.6.3 g++ Main.cc -o Main -Wall -lm --static -DONLINE_JUDGE 下可以过 (去掉-O2)/** * Problem:HNOI2013-d2p2 * Author:Shun Yao * Time:2013.5.28 * Result:Accepted * Memo:DP, greedy, guass */#include <cstring&g 阅读全文
posted @ 2013-05-29 14:21 hsuppr 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 以上转自http://jiazhipeng.byethost7.com/archives/176 阅读全文
posted @ 2013-05-29 14:11 hsuppr 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 题解懒得写 转自 http://tisu.is-programmer.com/posts/38862.html如果在新图中存在 i->k 和 j->k那么在原图里一定是这样的所以我们可以发现,如果存在i->k和j->k但只存在i->t或j->t其中之一,则新图不合法。mycode:/** * Problem:Inverse * Author:Shun Yao * Time:2013.5.27 * Result:Accepted */#include <cstring>#include <cstdlib>#include <cst 阅读全文
posted @ 2013-05-28 16:56 hsuppr 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 神做法见http://tieba.baidu.com/p/2354159387DP,f[t][i][j][k][p],表示枚举到第t位,A已放i个1,B已放j个1,C已放k个1,若p=0,表示该状态无进位;否则表示有进位。/** * Problem:aplusb * Author:Shun Yao * Time:2013.5.27 * Result:Accepted * Memo:DP */#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;long max(lon 阅读全文
posted @ 2013-05-28 16:52 hsuppr 阅读(530) 评论(0) 推荐(0) 编辑
摘要: 最终是没有平局的。我们发现白方赢是只有一步吃掉黑方。所以有人用dfs dp 过的。我是用贝贝的方法做的。http://tieba.baidu.com/p/2354159387(我写的有些繁琐)/** * Problem:chess * Author:Shun Yao * Time:2013.5.27 * Result:Accepted * Memo:DP */#include <cstring>#include <cstdlib>#include <cstdio>#define MaxN (20)#define MaxS (320000)#define ai 阅读全文
posted @ 2013-05-28 16:45 hsuppr 阅读(381) 评论(0) 推荐(0) 编辑
摘要: /** * Problem:Nim * Author:Shun Yao * Time:2013.5.28 * Result:Accepted */#include <cstdio>void swap(long &x, long &y) { x ^= y; y ^= x; x ^= y;}int main() { long n, a[100], b[100]; freopen("nim.in", "r", stdin); freopen("nim.out", "w", stdout); s 阅读全文
posted @ 2013-05-28 16:25 hsuppr 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 好长时间了。。简要除草。棋盘制作:经典dp。。。报表统计:明显数据结构,,,但我没想出来,第一问可以用堆,第二问用平衡树。矩阵游戏:好吧。一眼二分图,匈牙利过。时态同步:树形dp,貌似不难,(我也没想出来- -|),状态是每棵子树时态同步所需时间。 阅读全文
posted @ 2013-05-28 15:48 hsuppr 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 。。。不好解释直接上代码:/** * Problem:SAO * Author:Shun Yao * Time:2013.5.22 * Result:Accepted * Memo:DP */ #include <cstring>#include <cstdlib>#include <cstdio> #define SLL signed long long#define MOD 1000000007 using namespace std; const long Maxn = 1005, Maxm = 10005; long n, siz[Maxn], c[ 阅读全文
posted @ 2013-05-28 15:37 hsuppr 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 因为每个宝石只与另外一个宝石异或,可以发现宝石的左边比他大的第2个到右边比他大的第2个区间是这个宝石能够选取另一个与其异或的范围。枚举每个宝石,找到左右区间,暴力更新即可。。。标程是可持久化字典树。mycode:/** * Problem:ALO * Author:Shun Yao * Time:2013.5.22 * Result:Accepted */ #include <cstring>#include <cstdlib>#include <cstdio> using namespace std; long max(long x, long y) { 阅读全文
posted @ 2013-05-22 22:14 hsuppr 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 可以用后缀数组来做。我说以下ac自动机的做法:加入每个单词,对路径上的所有点累计访问次数。构建fail指针。把每个节点的访问次数累加到它的fail上。具体有代码。。(我写的很挫 - -)/** * Problem:Word * Author:Shun Yao * Time:2013.5.21 * Result:Accepted * Memo:AC-automation */#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;long n, l, r;char s[2 阅读全文
posted @ 2013-05-21 21:27 hsuppr 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 费用流,因为要求全部都是回路, 每个点出入度都为1,拆点分别代表出点和入点,剩下不多说。注意边界可以走 即n->1/** * Problem:Grid * Author:Shun Yao * Time:2013.5.21 * Result:Accepted * Memo:CostFlow */#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;const long dir[2][4] = {{0, 0, -1, 1}, {-1, 1, 0, 0}}, Maxt 阅读全文
posted @ 2013-05-21 21:21 hsuppr 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 坐标变换看图B - G 是原来的一个单位B - J 也是。我们发现 切比雪夫距离 可以在坐标旋转后转换为 曼哈顿距离 。而曼哈顿距离可以在O(n)内计算出(求出每个x到xi的距离,同理求y,相加求和即可);具体可以看我的代码:/** * Problem:Meeting * Author:Shun Yao * Time:2013.5.21 * Result:Accepted */#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>long n;long l 阅读全文
posted @ 2013-05-21 21:16 hsuppr 阅读(200) 评论(0) 推荐(0) 编辑