随笔分类 - 算法
摘要:一些前言:DP是个神奇的东西,有时候一些题看到要用DP,但是却因为没有思路而不会。属实挺遗憾的。今天学习学习树形DP,希望济南站能用到。 来道例题:HDU1520 题意:如图中样例所示,我们可以构建出这样的树。 对于样例,显然我们选择画圈的部分可以使得整个收益最大。 本题的解题关键之处有两点:1.利
阅读全文
摘要:树状数组是解决增加和查询的较好的方法时间复杂度均为logn 基础模板: int lowbit(int x) { //求x对应的2的k次方(k为x转换为2进制最低位开始连续0的个数) return x & (-x); } void update(int i, int k) {//在i位置加k whil
阅读全文
摘要:以hidoCoder上的一道裸题为例 如果我们不会manacher算法。我们应该如何解决这个问题呢? 我们首先学习一个叫中心扩展算法的东西。 对于回文串我们可以选择一个中心,进行左右扩展,判断左右两边字符是否相等。 因为字符存在奇数个或者偶数个,我们可以选择每个字符或者两个字符之间的空格进行扩展。所
阅读全文
摘要:直接用DFS进行搜索即可 class Solution { public: int numIslands(vector<vector<char>>& grid) { if(grid.empty()) { return 0; } int ans = 0; for(int i = 0; i < grid
阅读全文
摘要:Matrix-Tree 定理又称基尔霍夫矩阵树定理,其用于解决:给定 n 个点 m 条边的无向图,求图的生成树个数的问题。 【基尔霍夫矩阵】1.基本定义1)无向图 G:给定 n 个点,m 条边的无向图,设点集为 V,边集为 E,则其记为 G(V,E)2)度数矩阵 D[G]:当 i≠j 时,D[i][
阅读全文
摘要:KMP是一种字符串的模式匹配算法 如图我们需要实现T串匹配S串。绿色代表匹配成功,黄色代表开始出现匹配错误。 在下一次匹配错误中我们把i设置为i-j+2 然后继续匹配,这是朴素的匹配方法 我们这时候需要思考一个问题,能不能让匹配过程变得更快?让T多往后移动一点儿。 我们需要引入最长公共前后缀概念。
阅读全文
摘要:在求解欧拉回路的问题中我们可以采用fleury算法。 然而在进行算法竞赛时,如果只是求欧拉回路我们可以采用DFS进行实现,需要注意的小细节时在输出边时需要在回溯阶段逆向输出因为遇到 1->2->3->2->1这种图会出现走死路情况 来看道例题: UVA10054 #include <bits/std
阅读全文
摘要:1. Sample Input 6 -2 11 -4 13 -5 -2 10 -10 1 2 3 4 -5 -23 3 7 -21 6 5 -8 3 2 5 0 1 10 3 -1 -5 -2 3 -1 0 -2 0 Sample Output 20 11 13 10 1 4 10 3 5 10 1
阅读全文
摘要:最终刷题太多了博客思路慢慢更新 1.利用havel定理判断可不可以简单图化的一道好题 Sample Input 3 7 4 3 1 5 4 2 1 6 4 3 1 4 2 0 6 2 3 1 1 2 1 Sample Output YES 0 1 0 1 1 0 1 1 0 0 1 1 0 0 0
阅读全文
摘要:匈牙利算法 匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法 该算法是求解二分图的完全匹配问题 建图:把行号放左边点集,列号放在右边点集。 关键是求该二分图的最小边覆盖点集使得每条边都被至少一个点覆盖。 算法模板: //使用bfs实现 int dfs(int e) { for(int i
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; typedef long long ll; int v1[100001]; int v2[100001]; int s1[100001]; int s2[100001]; int main () { ios::sync_with_stdio(false); int n; cin >> n; for (int
阅读全文
摘要:#include using namespace std; typedef long long ll; const ll mod=10007; ll fac[1050]; ll q_pow(ll a,ll b) { ll ans=1; while(b) { if(b&1) ans=(ans*a)%mod; a=(a...
阅读全文
摘要:Sample Input 8 13 0 1 1 6 6 5 5 0 0 6 1 2 2 3 3 4 4 5 7 1 7 2 7 6 3 6 5 1 6 3 5 Sample Output 1 1 1 2 3 3
阅读全文
摘要:1.原理: 不做过多解释,不会去翻高中数学教材 2.重要结论: 1.前n项和 可以 用 n + 2项的数减一得到 计算方法: 矩阵快速幂!!! 上板子题: Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 212
阅读全文
摘要:#include using namespace std; long long powM(long long a, long long b, long long mode) { long long sum = 1; a = a % mode; while (b > 0) { if (b % 2 == 1) //判断是否是奇数,是奇数的话将多...
阅读全文
摘要://#include #include #include using namespace std; int N; // 1 tree[maxn + 5]; // tree[i]表示节点i的相邻节点 int d[maxn + 5]; // d[i]表示以i为根的子树的节点个数 #define ...
阅读全文
摘要:Examples 输入 5 8 2 3 1 1 2 输出 4 输入 7 10 1 3 4 2 1 4 2 输出 2 输入 5 15 5 5 5 5 5 输出 1 输入 5 16 5 5 5 5 5 输出 2 输入 5 26 5 5 5 5 5 输出 -1 Note 在第一个样例中,泰泰学长第一天可以
阅读全文
摘要:A.POJ_2631 1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 #include<vector> 5 using namespace std; 6 const int maxn = 24000; 7 int vis[ma
阅读全文

浙公网安备 33010602011771号