摘要:
A 简单DP,状态DP[I][J] 表示第I个时间位置为J的最小花费View Code #include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>const int INF = 0x3f3f3f3f;#define MIN(a,b) (a)<(b)?(a):(b)int dp[21][510];int val[21];int n, k;int main(){ while( scanf("%d%d", &n,&k) != EOF 阅读全文
摘要:
题意 n*m的矩阵中,某些地区需要放置雷达,而雷达覆盖有四种方式,上下左右,问最少的雷达数量覆盖所有*号地区。解法 关于二分图的性质,有点晕头转向了。 和旭神讨论了。 这个题目是满足二分图的。因为对于一个雷达其关联的地方分别为上下左右,不能够斜线。则与雷达A关联的其它雷达间是不会有联系的。所以不会形成环。可以转换成2个集合间的关联关系。所以我们可以通过拆点法求出最大匹配。而有效顶点数量 = 最大匹配数 + 边覆盖数(最小边覆盖集)。同时也是本题的所求的边覆盖数,既最小雷达数量。View Code #include<cstdio>#include<cstdlib>#inc 阅读全文
摘要:
题意 n*n的矩阵中,有空地和墙,放置机器人能攻击到垂直和水平地方(有墙则被隔绝),问最多能放多少机器人,相互之间不攻击解题思路 最大独立集, 对于实际顶点应该是除去墙。 然后贴模板~~ View Code #include<cstdio>#include<cstring>#define N 50bool flag[N], a[N][N];int ans, cnt[N], group[N], n, m, vis[N]; bool dfs( int u, int pos ){ int i, j; for( i = u+1; i <= n; i++){ if( cn. 阅读全文
摘要:
题意 给一个无向图,求其最大团中顶点数量。。。解题思路 跪了。。。这够裸了。。。 最大团模板。。View Code #include<cstdio>#include<cstring>#define N 51bool flag[N], a[N][N];int ans, cnt[N], group[N], n, m, vis[N]; bool dfs( int u, int pos ){ int i, j; for( i = u+1; i <= n; i++){ if( cnt[i]+pos <= ans ) return 0; if( a[u][i]... 阅读全文
摘要:
题目大意: 一个无向图中,使用黑白两种颜色对顶点着色,要求相邻顶点不能同时为黑色,求最大能染黑色顶点数量以及对应顶点。解题思路: 相邻顶点间有边相连,模型转换成求 无向图 最大独立集。因为是NP问题,目前没有有效算法。 又 最大团顶点数量 = 补图的最大独立集 所以我们可以用 优化的 Bron-Kerbosch算求其补图的最大团,然后得出当前图的最大独立集View Code #include<cstdio>#include<cstring>#define N 1010bool flag[N], a[N][N];int ans, cnt[N], group[N], n, 阅读全文
摘要:
本文转载自http://www.felix021.com/blog/read.php?2040,如是转载文则注明原出处,谢谢:)Google Reader 订阅点击这里,RSS地址:http://www.felix021.com/blog/feed.php。源于这两篇文章:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome 阅读全文
摘要:
游戏开始时有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。游戏者在每次操作时可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。游戏者轮流操作,将最后一枚硬币移至地上的人获胜。 分析:这个问题与nim游戏的区别在于移走的硬币不是被扔掉而是被放进了另一堆硬币之中,考虑能否将这一部分楼梯排除考虑范围。奇数号楼梯只能将硬币扔到偶数号楼梯之中,同样偶数号楼梯上的硬币也只会被扔上奇数号楼梯。只考虑奇数号楼梯nim,若偶数楼梯只作容器,那么游戏变为nim。当偶数号楼梯上的硬币可以将硬币移出时,我们是不是仍然可以用nim的方法判断必败状态?将奇数台阶的硬币 阅读全文
摘要:
刘雅琼PPT讲解链接:http://www.doc88.com/p-216945446450.html扩展KMP:给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0<=i<lenA),求出A[i..lenA-1]与B的最长公共前缀长度,记为ex[i](或者说,ex[i]为满足A[i..i+z-1]==B[0..z-1]的最大的z值)。扩展KMP可以用来解决很多字符串问题,如求一个字符串的最长回文子串和最长重复子串。【算法】设next[i]为满足B[i..i+z-1]==B[0..z-1]的最大的z值(也就是B的自身匹配)。设目前next[0. 阅读全文
摘要:
本文转载自:http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9曾经看过如下一个公式:以上的公式如果第一次见到,难免有不少疑惑:为什么可以这么写?限制条件为什么是x >= Phi(C),这个公式为什么正确?今天突发奇想,在纸上YY以后得到了以下证明(个人证明,如果有问题欢迎提出)定理 1:对于一个数对(A,C) 必然存在一个最小的正整数 L,满足其中SPOS 是一个大于等于0的整数(下面具体介绍)我们称L 为(A,C) 的最小循环节长度证明:根据鸽巢原理,得到在x >= C 后必然出现循环,从而定理得证.定理 2:对 阅读全文
摘要:
本文内容转载自Matrix67大神:http://www.matrix67.com/blog/archives/333除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题。比如,有时我们需要知道给定的两个字符串“有多像”,换句话说两个字符串的相似度是多少。1965年,俄国科学家Vladimir Levenshtein给字符串相似度做出了一个明确的定义叫做Levenshtein距离,我们通常叫它“编辑距离”。字符串A到B的编辑距离是指,只用插入、删除和替换三种操作,最少需要多少步可以把A变成B。例如,从FAME到GATE需要两步(两次替换),从G 阅读全文
摘要:
1. 概述同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不是二叉堆,二叉堆必须是完全二叉树,而Treap可以并不一定是。2. Treap基本操作为了使Treap 中的节点同时满足BST性质和最小堆性质,不可避免地要对其结构进行调整,调整方式被称为旋转。在维护Treap 的过程中,只有两种旋转,分别是左旋转(简称左旋)和右旋转(简称右旋)。左旋一个子树,会把它的根节点旋转到根的左子树位置,同时根节点的右子 阅读全文
摘要:
#include<cstdio>#include<cstring>#define N 1010bool flag[N], a[N][N];int ans, cnt[N], group[N], n, vis[N];// 最大团: V中取K个顶点,两点间相互连接// 最大独立集: V中取K个顶点,两点间不连接 // 最大团数量 = 补图中最大独立集数 bool dfs( int u, int pos ){ int i, j; for( i = u+1; i <= n; i++){ if( cnt[i]+pos <= ans ) return 0; if( a.. 阅读全文
摘要:
训练专题以及解题思路... 持续更新 Train 1 搜索 Train 2 动态规划 Train 3 组合数学 Train 4 点分治 Train 5 最大流 Train 6 群论/置换群 Train 7 动态规划1 Train 8 动态规划2 Train 9 动态规划3 Train 10 动态规划4 Train 11 最大独立集与二分图匹配 A. 最大独立子集,用最大团模板即可,注意若不存在的特殊情况 B. 跪了,赤裸裸的最大团模板题 C. 最大独立集,去除掉墙壁的点,才是实际的图。注意模板的ans=-1,若为-1则手动设定为0.即不存... 阅读全文
摘要:
A 错排公式 d[n] = (n-1)*(d[n-1]+d[n-2]);View Code #include<stdio.h>typedef long long LL;LL d[110];const int mod = 1e9+7;void init(){ d[1] = 0; d[2] = 1; for(int i = 3; i <= 100; i++){ d[i] = 1LL*(i-1)*(d[i-1]+d[i-2])%mod; } }int main(){ init(); int T; scanf("%d",&T); ... 阅读全文
摘要:
---恢复内容开始---Bron-Kerbosch算法计算图的最大全连通分量(团clique)最大独立集: 顶点集V中取 K个顶点,其两两间无连接。最大团: 顶点集V中取 K个顶点,其两两间有边连接。最大团中顶点数量 = 补图的最大独立集中顶点数量补图定义: G=<V,E> thecomplementofG,\bar{G}=<V,V\timesV-E> 详见连接:http://zh.wikipedia.org/wiki/%E8%A3%9C%E5%9C%96 更详细的:http://en.wikipedia.org/wiki/Bron%E2%80%93Kerbos... 阅读全文