上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 26 下一页
摘要: 题意即求一个最小顶点覆盖。对于没有孤立点的图G=(V,E),最大独立集+最小顶点覆盖= V。(往最大独立集加点)问题可以变成求树上的最大独立集合。每个结点的选择和其父节点选不选有关,dp(u,1)表示父节点选,这时u不可选,dp(u,0)表示父节点不选,这时u可选可不选。#includeusing ... 阅读全文
posted @ 2015-10-04 18:58 陈瑞宇 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 为了方便打印路径,考虑从下往上转移。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... 阅读全文
posted @ 2015-10-04 18:32 陈瑞宇 阅读(223) 评论(0) 推荐(0) 编辑
摘要: A[i][j]表示在循环节下标i开头j结尾的最长不减子序列,这个序列的长度为p,另外一个长度为q的序列对应的矩阵为B[i][j],将两序列合并,新的序列对应矩阵C[i][j] = max(A[i][k]+B[k][j])。非法的情况标记为-INF,用倍增加速。#includeusing namesp... 阅读全文
posted @ 2015-10-04 18:21 陈瑞宇 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 对角线上的元素就是a[i],而且在所在行和列中最大,首先可以确定的是最大的元素一定是a[i]之一,这让人想到到了排序。经过排序后,每次选最大的数字,如果不是之前更大数字的gcd,那么只能是a[i]之一。div2路漫漫。。。#includeusing namespace std;typedef int... 阅读全文
posted @ 2015-10-04 18:15 陈瑞宇 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 分析:对于网格grid[i][j]如果放向上的管道,那么grid[i][k], k>j 就只能放向上的管道了。那么定义dp[i][j]表示第i行,最后一个放向左的管道是j的最大总矿量。j = 0表示全放向上,j = m表示全放向左。如果grid[i][j]要往放向上的管道的话,前提是grid[i-1... 阅读全文
posted @ 2015-10-03 22:24 陈瑞宇 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 分析:如果问题是要求最后一个删除的数,重新编号为0到n-1,f[n]表示答案,那么f[n] = (f[n-1]+k)%n。因为删掉下标k-1以后可以从下标k重新编号为0。在这个问题只需要推出最后三个数,然后三个数一起转移即可。单个case的复杂度O(n)#includeusing namespace... 阅读全文
posted @ 2015-10-03 21:55 陈瑞宇 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 分析:状态是一些有序的集合,这些集合互不相交,并集为所有区域。显然枚举集合元素是哪些是无法承受的,写出期望的计算式,会发现,当每个集合的大小确定了以后,概率大的优先访问是最优的。因此先对u从大到小排序。定义状态f[i][j]表示从j开始往后分i组的最小期望。转移是枚举划分k,则有f[i][j] = ... 阅读全文
posted @ 2015-10-03 21:43 陈瑞宇 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 把消灭了那些机器人作为状态S,预处理出状态S下可以消灭的机器人,转移统计方案。方案数最多16!,要用64bit保存方案。#includeusing namespace std;const int Mx = 16, maxs = 1>i&1) continue; if(canAtk[S]... 阅读全文
posted @ 2015-10-02 17:24 陈瑞宇 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 贪心,对于一个修饰关系可以连一条有向边,在合并的时候,子节点的序列一定是连续安排的,因为如果有交叉,交换以后一定更优。然后一个序列一个序列的考虑,长度短的应该在前面,否则同样交换以后更优。因此排序以后统计就行了。数据理论最多递归1e6层,dfs爆栈了,手写栈模拟递归。。。#includeusing ... 阅读全文
posted @ 2015-10-02 17:17 陈瑞宇 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 最长回文子序列可以用求解原串s和反转串rv的LCS来得到,因为要求回文串分奇偶,dp[i][j]保存长度,要求字典序最小,dp[i][j]应该表示回文子序列的端点,所以边界为单个字符,即i+j=len+1。这题最麻烦的地方在于字典序,我是写了个比较函数,有点暴力(常数大)。也可以反着定义,这时结点就... 阅读全文
posted @ 2015-10-01 22:32 陈瑞宇 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 把有向图修改成无向图,并保证每条边的流量守恒并满足有向容量(即abs(flow(u,v) - flow(v,u)) using namespace std;const int N = 301,M = N*(N-1);int n,m;int hd[N],nx[M],to[M],cap[M],ect;i... 阅读全文
posted @ 2015-10-01 18:51 陈瑞宇 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 状压以后,直接暴力枚举,2^20约等于1e6,而且满足bitcount = m的状态很少。#includeusing namespace std;const int maxn = 20+1;double x[maxn],y[maxn],z[maxn];double d[maxn][maxn];dou... 阅读全文
posted @ 2015-10-01 17:40 陈瑞宇 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 根据概率公式dfs即可,判断和区间[T-E,T+E]是否有交,控制层数。#includeusing namespace std;int K,R,L;double P,E,T;double Lt,Rt;double dfs(double L,double R,int k = 0){ if(RRt... 阅读全文
posted @ 2015-10-01 17:35 陈瑞宇 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 因为第i个人休息j次服从二项分布,算一下组合数。数据范围小。求出第i个人休息j次的概率和对应的时间之后,全概率公式暴力统计。#includeusing namespace std;const int maxn = 101,maxm = 51;int P[maxn],T[maxn],V[maxn];l... 阅读全文
posted @ 2015-10-01 17:30 陈瑞宇 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 一个区间一个区间的考虑,当前区间的决策只和上一次的末尾有关,考虑转移的时候先统计当前区间出现过的字母以及种数ct枚举上一个区间的末尾标号j,规定小于INF为合法状态,确定j之后看j有没有在当前的区间出现,如果出现则贪心选块数+ct-1,枚举当前的结尾。为了方便处理,增加一个0区间,初始为0,这样所有... 阅读全文
posted @ 2015-09-30 23:46 陈瑞宇 阅读(189) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 26 下一页