摘要:
题意即求一个最小顶点覆盖。对于没有孤立点的图G=(V,E),最大独立集+最小顶点覆盖= V。(往最大独立集加点)问题可以变成求树上的最大独立集合。每个结点的选择和其父节点选不选有关,dp(u,1)表示父节点选,这时u不可选,dp(u,0)表示父节点不选,这时u可选可不选。#includeusing ... 阅读全文
摘要:
为了方便打印路径,考虑从下往上转移。dp[i][j][S]表示在i行j列总和为S的方案,dp[i][j][S] = dp[i+1][left][S-x]+dp[i+1][right][S-x]方案O(2^2*n-1),结果要用long long保存。#includeusing namespace s... 阅读全文
摘要:
A[i][j]表示在循环节下标i开头j结尾的最长不减子序列,这个序列的长度为p,另外一个长度为q的序列对应的矩阵为B[i][j],将两序列合并,新的序列对应矩阵C[i][j] = max(A[i][k]+B[k][j])。非法的情况标记为-INF,用倍增加速。#includeusing namesp... 阅读全文
摘要:
对角线上的元素就是a[i],而且在所在行和列中最大,首先可以确定的是最大的元素一定是a[i]之一,这让人想到到了排序。经过排序后,每次选最大的数字,如果不是之前更大数字的gcd,那么只能是a[i]之一。div2路漫漫。。。#includeusing namespace std;typedef int... 阅读全文