摘要: 最小点权覆盖就是,对于有点权的有向图,选出权值和最少的点的集合覆盖所有的边。 解二分图最小点权覆盖集可以用最小割: vs-X-Y-vt这样连边,vs和X部点的连边容量为X部点的权值,Y部和vt连边容量为Y部点的权值,X和Y是原二分图中的边容量为INF。 这一题建二分图是这样的:把原图中的点拆成两个点 阅读全文
posted @ 2016-01-12 19:44 WABoss 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 我可能真想不到这题是区间DP,不过知道是区间DP想了下就AC了。 dp[i][j]表示局面为ai...aj先手能获得与后手得分的最大差值 那么转移到当前状态就是枚举中间的位置,分成两边,其中一边先手全部取另一边就是新的局面,后手变成新的先手的局面,而后手也会采取最优策略也会尽量让剩下这个局面差值最大 阅读全文
posted @ 2016-01-12 18:14 WABoss 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 最小点覆盖集就是在一个有向图中选出最少的点集,使其覆盖所有的边。 二分图最小点覆盖集=二分图最大匹配(二分图最大边独立集) 这题A机器的n种模式作为X部的点,B机器的m种模式作为Y部的点; 每个任务就作为边,端点是可以完成它的A和B的某个模式。 这样,问题就变成在这个二分图中取出最少的点覆盖所有的边 阅读全文
posted @ 2016-01-12 09:44 WABoss 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 最大匹配也叫最大边独立集,就是无向图中能取出两两不相邻的边的最大集合。 二分图最大匹配可以用最大流来解。 如果题目没有墙,那就是一道经典的二分图最大匹配问题: 把地图上的行和列分别作为点的X部和Y部,地图上每一块空地看作边,边的两个端点就是它所在的x行y列。这样,求最大边独立集即可。 而这一题有墙, 阅读全文
posted @ 2016-01-11 21:14 WABoss 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 给一个字符串,问有几种删字符的方式使删后的非空字符串是个回文串。 当然区间DP:dp[i][j]表示子串stri...strj的方案数 感觉不好转移,可能重复算了。我手算了"AAA"这个数据,然后就搞出转移的方式: d[i][j] = ∑ d[i'][j']+1 (i<=i'<=j'<=j 且 st 阅读全文
posted @ 2016-01-11 10:36 WABoss 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 求一个图的哈密顿路径的最大权及其路径数。显然状态压缩+DP。 dp[v][u][S] 表示从v走到当前顶点 u且走过的顶点集合是S的 最大权值和方案数 这题我用记忆化搜索,从终点开始递归进行,感觉这样比较容易转移。 就是搜索一个状态可以从哪些状态转移过来,顺便统计方案数。搜索时要注意一些细节,转移要 阅读全文
posted @ 2016-01-10 17:10 WABoss 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 容易想到状态dp[n][S][m](S是数字出现的集合),表示前n位用了数字集S且模k余数是m的方案数。 利用 (xy)base % k = ( x*base+y ) % k = (( x%k ) * base + y) % k ,进行状态第三维的转移。 不过d[16][216][20]有2000多 阅读全文
posted @ 2016-01-09 19:25 WABoss 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 容易猜测到包含s1、s2序列的串的最短长度是LCS(s1,s2) + ( len(s1) - LCS(s1,s2) ) + ( len(s2) - LCS(s1,s2) ) ,即: len(s1)+len(s2)-LCS(s1,s2) 接下来求方案数,可以想到: dp[k][i][j]表示由s1前i 阅读全文
posted @ 2016-01-09 10:37 WABoss 阅读(183) 评论(0) 推荐(0) 编辑
摘要: n位密码,要用尽可能短的序列将n位密码的10n种状态的子串都包括,那么要尽量地重合。 题目已经说最短的是10n + n - 1,即每一个状态的后n-1位都和序列中后一个状态的前n-1位重合。 这题是经典的欧拉路径问题吧,用n位数字10n种状态来作为边,而用重合的n-1位数字表示点。 具体的建图,每个 阅读全文
posted @ 2016-01-08 19:54 WABoss 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 与ZOJ2770一个建模方式,前缀和当作点。 对于每个区间[a,b]有这么个条件,Sa-Sb-1>=c,然后我就那样连边WA了好几次。 后来偷看数据才想到这题还有两个隐藏的约束条件。 这题前缀和表示的是区间内点存在的个数,因此: Si>=Si-1 Si-Si-1<=1 所以,差分约束系统的构图一定要 阅读全文
posted @ 2016-01-04 10:08 WABoss 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 区间和一定要联系到前缀和。 这题,把前缀和看作点,从s0到sn; 对于每一个营地i的容量capi,有这么个关系si-si-1<=capi; 对于每一个区间的评估i,j,k,有sj-si-1>=k,即si-1-sj<=k; 接下来就是连边了,对于v<=u+w由u向v连权w的边,超级源向n+1个点连权0 阅读全文
posted @ 2016-01-03 21:17 WABoss 阅读(340) 评论(0) 推荐(0) 编辑
摘要: d[i][j]表示从i点到j点可以全程提供光纤的公司的集合,集合用26位的二进制压缩。 那么状态转移方程就是dk[i][j]|=dk-1[i][k]&dk-1[k][j]。 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 阅读全文
posted @ 2016-01-03 14:49 WABoss 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 题目要求1到n点的最大容量的增广路。 听说是最短路求的,然后乱搞就A了。。 大概能从Bellman-Ford的思想,dk[u]表示从源点出发经过最多k条边到达u点的最短路,上理解正确性。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 阅读全文
posted @ 2016-01-01 23:11 WABoss 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 单整点集V是无向无环图,可以看作树。 dp[u]表示,选取u点时u点和它子树最大的权和。 而某个点不选,那么它和它子树的最大权和是0,因为题目求的集合要连通。 状态转移方程是:dp[u]=∑max(0,dp[son(u)])。 1 #include<cstdio> 2 #include<cstdli 阅读全文
posted @ 2016-01-01 21:31 WABoss 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 跑完Floyd后,d[u][u]就表示从u点出发可以经过所有n个点回到u点的最短路,因此只要根据数组对角线的信息就能判断是否存在负环。 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<string> 5 # 阅读全文
posted @ 2016-01-01 15:43 WABoss 阅读(740) 评论(0) 推荐(0) 编辑