04 2020 档案

摘要:#include <iostream> #include <algorithm> using namespace std; const int N = 1001, M = 501; int f[N][M]; int main() { int V1, V2, n; cin>>V1>>V2>>n; fo 阅读全文
posted @ 2020-04-27 09:26 龙雪可可 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2020-04-26 18:36 龙雪可可 阅读(82) 评论(0) 推荐(0) 编辑
摘要:方格取数: #include <iostream> #include <algorithm> const int N = 12; int f[N*2][N][N], a[N][N];//注意这里f数组的第一维的大小应该为2*N,因为表示的是走到的方格行+列 using namespace std; 阅读全文
posted @ 2020-04-23 16:57 龙雪可可 阅读(95) 评论(0) 推荐(0) 编辑
摘要:区间选点 定N个闭区间[ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数N,表示区间数。 接下来N行,每行包含两个整数ai,bi,表示一个区间的两个端点。 输出格式 输出一个整数,表示 阅读全文
posted @ 2020-04-22 22:03 龙雪可可 阅读(141) 评论(0) 推荐(0) 编辑
摘要:f[i][j] 所有从(i, j)开始滑的路径 属性:Max 状态计算:分情况讨论 f(i, j):向上、向下、向左、向右 先都把第一步f(i, j)去掉,f(i, j) += f(i, j + 1) + 1; 每一步存在的条件:右边的高度小于当前点的高度。 拓扑图:不能存在环,此题中不可能存在环 阅读全文
posted @ 2020-04-22 21:35 龙雪可可 阅读(139) 评论(0) 推荐(0) 编辑
摘要:没有上司的舞会 挑没有直接边相连的点的数量最多。 f[u, 0]所有从以u为根的子树中选择,并且不选u这个点的方案。 f[u, 1]所有从以u为根的子树中选,并且选择u这个点的方案。 属性Max; f(u, 0): ] #include <iostream> #include <algorithm> 阅读全文
posted @ 2020-04-22 21:30 龙雪可可 阅读(71) 评论(0) 推荐(0) 编辑
摘要:f[i][j]表示第i列上一列横向摆放方格伸出来的方案数 j:本列伸出来的格子的二进制表示。 k:上列伸出来的格子的二进制表示 1)不能有冲突,即1不能有重叠,j & k == 0; 2) 连续的空格不能为奇数,因为横着的已经摆放玩了,只能放竖的了,所以不能有连续奇数个空格,j | k =奇数个0 阅读全文
posted @ 2020-04-22 20:32 龙雪可可 阅读(111) 评论(0) 推荐(0) 编辑
摘要:数位统计DP-计数问题 分情况讨论:【a, b】,0~9 count(n, x),1~n中x出现的次数。 【a, b】中x出现的次数, 用前缀和:count(b, x) - count(a-1, x); 1 ~ n,x = 1 n = abcdefg 分别求出1在每一位上出现的次数 eg:比如求1在 阅读全文
posted @ 2020-04-22 18:14 龙雪可可 阅读(147) 评论(0) 推荐(0) 编辑
摘要://背包:容量是n的背包,n个物品的体积分别是1,2,3……n,恰好装满背包的方案数,每个物品可以用无限次 状态表示:f(i, j) 集合:从1~i中选,体积恰好是j的方案 属性:数量 状态计算: f(i,j):i选了0,1,2,3……n个: f[i - 1][j], f[i-1][j-i], f( 阅读全文
posted @ 2020-04-22 13:23 龙雪可可 阅读(127) 评论(0) 推荐(0) 编辑
摘要:状态表示的时候表示的是某一段区间。 动态规划: 1、状态表示:f[i, j] 第i堆到第j堆的区间 1)集合:所有将第i堆和第j堆石子合并成一堆石子的 合并方法的集合 2)min: 所有合并方式代价的最小值 2、状态计算:f[1][n]就是所求的,从第1堆一直合并到第n堆的合并方式的最小值。 最后一 阅读全文
posted @ 2020-04-22 12:22 龙雪可可 阅读(109) 评论(0) 推荐(0) 编辑
摘要:902. 最短编辑距离 给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有: 删除–将字符串A中的某个字符删除。 插入–在字符串A的某个位置插入某个字符。 替换–将字符串A中的某个字符替换为另一个字符。 现在请你求出,将A变为B至少需要进行多少次操作。 输入格式 第一行包含整数n,表 阅读全文
posted @ 2020-04-22 00:24 龙雪可可 阅读(149) 评论(0) 推荐(0) 编辑
摘要:输入样例: 4 5 acbd abedc 输出样例: 3 集合f[i][j]: 所有在第一个序列的前i个字母中出现,且在第二个序列的前j个字母中出现的子序列 属性:最大值max。 包含与不包含a[i] b[j]的情况,都不包含a[i] b[j]的情况:00: f[i-1][j-1], 都包含a[i] 阅读全文
posted @ 2020-04-21 23:24 龙雪可可 阅读(149) 评论(0) 推荐(0) 编辑
摘要:一层一层的,有着近似的线性关系,称为线性DP。 数字三角形: 复杂度:状态数量 * 转移,本题状态数量是n ^ 2 = 500 * 500 = 250000,转移是O(1)的。 #include <iostream> #include <algorithm> #include <cstring> u 阅读全文
posted @ 2020-04-21 20:02 龙雪可可 阅读(160) 评论(0) 推荐(0) 编辑
摘要:01背包问题: #include <iostream> #include <algorithm> using namespace std; const int N = 1010; int v[N], w[N]; int f[N][N]; int main() { int n, m; cin>>n>> 阅读全文
posted @ 2020-04-20 22:37 龙雪可可 阅读(121) 评论(0) 推荐(0) 编辑
摘要:Nim游戏: 给定n堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问如果两人都采用最优策略. /*先手必胜状态:可以走到某一个必败状态(2,2)(0,0)先手必败状态:走不到任何一个必败状态(1,2)(0,2)*/ 阅读全文
posted @ 2020-04-20 11:59 龙雪可可 阅读(216) 评论(0) 推荐(0) 编辑
摘要:三个圆围成的面积。 A + B + C - D - E - F + G 给定一个整数n和m个不同的质数p1,p2,…,pm。 请你求出1~n中能被p1,p2,…,pm中的至少一个数整除的整数有多少个。 输入格式 第一行包含整数n和m。 第二行包含m个质数。 输出格式 输出一个整数,表示满足条件的整数 阅读全文
posted @ 2020-04-19 22:39 龙雪可可 阅读(348) 评论(0) 推荐(0) 编辑
摘要:1、求组合数,从a中选b个数的方案: #include <iostream> using namespace std; const int N = 2001, mod = 1e9 + 7; int c[N][N]; void init() { for(int i = 0;i < N;i++) for 阅读全文
posted @ 2020-04-19 15:25 龙雪可可 阅读(287) 评论(0) 推荐(0) 编辑
摘要:Gauss #include <iostream> #include <algorithm> #include <cmath> using namespace std; const double eps = 1e-6; const int N =110; int n; double a[N][N]; 阅读全文
posted @ 2020-04-19 12:47 龙雪可可 阅读(202) 评论(0) 推荐(0) 编辑
摘要:裴蜀定理:对于一对正整数a, b, 存在非零整数x, y使得ax + by = gcd(a, b); ax + by 一定是最大公约数gcd(x, y)的倍数。 1) 如果b = 0,gcd(a, 0) = a, a就是最大公约数ax + by = a. (x = 1, y = 0是一组解) 0和x 阅读全文
posted @ 2020-04-18 15:15 龙雪可可 阅读(142) 评论(0) 推荐(0) 编辑
摘要:求a^k % p,(1 <= a, k, p <=10^9) #include <iostream> #include <algorithm> using namespace std; typedef long long LL; LL qmi(int a, int b, int p) { LL re 阅读全文
posted @ 2020-04-18 12:43 龙雪可可 阅读(499) 评论(0) 推荐(0) 编辑
摘要:欧拉函数:φ(n)即在1~n中与n互质的数的个数φ(1) = 1, φ(2) = 1, φ(3) = 2,φ(4) = 2,φ(5) = 4,φ(6) = 2(即1、5) 对于一个数N肯定等于它的质因子的指数和:N = p1^φ1 + p2^φ2 + ……+pk^φk。 那么求该数的欧拉函数等于:φ 阅读全文
posted @ 2020-04-17 23:16 龙雪可可 阅读(2808) 评论(0) 推荐(0) 编辑
摘要:试除法求约数: #include <iostream> #include <algorithm> #include <vector> using namespace std; int n; vector<int> get_divisors(int x) { vector<int> res; for( 阅读全文
posted @ 2020-04-17 19:57 龙雪可可 阅读(274) 评论(0) 推荐(0) 编辑
摘要:埃氏筛法: #include <iostream> using namespace std; const int N = 1e6; int n, cnt, primes[N]; bool st[N]; void get_primes(int n) { //时间复杂度:n/2 + n / 3 + .. 阅读全文
posted @ 2020-04-17 17:22 龙雪可可 阅读(187) 评论(0) 推荐(0) 编辑
摘要:二分图的最大匹配: #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 510, M = 100010; int n1, n2, m; int h[N], e[M 阅读全文
posted @ 2020-04-16 20:48 龙雪可可 阅读(95) 评论(0) 推荐(0) 编辑
摘要:二分图染色法 即可以把所有的点划分到两个集合内,集合内部没有边存在。 一个图是二分图,当且仅当该图中不含奇数环 ——>不含奇数环,那么一定是二分图。有奇数环的话,那么就不能二分图。 判定二分图的依据:若出现一条边的两个端点是同样的颜色(即一个集合的话),那么就不能划分为二分图。 一条边的两个端点一定 阅读全文
posted @ 2020-04-16 20:08 龙雪可可 阅读(188) 评论(0) 推荐(0) 编辑
摘要:kruskal求最小生成树: #include <iostream> #include <algorithm> using namespace std; const int N = 100010; int p[N]; struct Edge{ int a, b, w; bool operator < 阅读全文
posted @ 2020-04-16 19:05 龙雪可可 阅读(144) 评论(0) 推荐(0) 编辑
摘要:prim算法求最小生成树 #include <iostream> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int N = 501, INF = 0x3f3f3f3f; in 阅读全文
posted @ 2020-04-16 17:16 龙雪可可 阅读(228) 评论(0) 推荐(0) 编辑
摘要:854. Floyd求最短路 给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。 再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。 数据保证图中不存在负权回路。 输入格式 第一行包含三个整数n,m,k 接 阅读全文
posted @ 2020-04-16 16:22 龙雪可可 阅读(215) 评论(0) 推荐(0) 编辑
摘要:acwing 851: spfa求最短路 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。 数据保证不存在负权回路。 输入格式 第一行包含整数n和m。 接下来m行每行包含三个整数x,y 阅读全文
posted @ 2020-04-16 00:30 龙雪可可 阅读(182) 评论(0) 推荐(0) 编辑
摘要:bellman_ford算法:有边数限制的最短路,可以处理重边、负边和自环。 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。 注意:图中可能 存在负权回路 。 输入格 阅读全文
posted @ 2020-04-15 23:50 龙雪可可 阅读(94) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 500; int n, m, g[N][N], d[N]; bool st[N]; int dijkstra( 阅读全文
posted @ 2020-04-14 21:59 龙雪可可 阅读(234) 评论(0) 推荐(0) 编辑
摘要:#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 100010, M = 2 * N; int n, ans = N; int h[N], e[M], ne[M 阅读全文
posted @ 2020-04-14 14:28 龙雪可可 阅读(183) 评论(0) 推荐(0) 编辑
摘要:散列法: #include <cstdio> #include <iostream> #include <string.h> using namespace std; const int N = 100010, null = 0x3f3f3f3f; int h[N], e[N], ne[N], id 阅读全文
posted @ 2020-04-13 23:49 龙雪可可 阅读(107) 评论(0) 推荐(0) 编辑
摘要:堆: #include <cstdio> #include <iostream> using namespace std; const int N = 100010; int n,m,h[N],s; void down(int u) { int t = u; if(u * 2 <= s && h[u 阅读全文
posted @ 2020-04-13 17:51 龙雪可可 阅读(153) 评论(0) 推荐(0) 编辑
摘要:并查集(Union-find): 首先看一下查找的过程,两行代码: //查找x元素所在集合的编号 int find(x) { if(x != p[x]) p[x] = find(p[x]); return p[x]; } if(find(x) != find(y)) p[find(x)] = fin 阅读全文
posted @ 2020-04-12 21:22 龙雪可可 阅读(116) 评论(0) 推荐(0) 编辑
摘要:在一个字符串集合当中进行字符串的插入和查找,采用的是由上而下的存储从首字母开始的一个树结构。 进行字符串的插入操作: int insert(char str[]) { int p = 0; for(int i = 0;str[i];i++) { int u = str[i] - 'a'; if(!s 阅读全文
posted @ 2020-04-12 16:52 龙雪可可 阅读(159) 评论(0) 推荐(0) 编辑
摘要:经过几天断断续续的思考,KMP总算是差不多搞懂了。 主串s和模式串p进行匹配,p在s中出现的位置。 代码如下: #include <cstdio> #include <iostream> using namespace std; const int N = 10001, M = 100001; ch 阅读全文
posted @ 2020-04-12 12:51 龙雪可可 阅读(125) 评论(0) 推荐(0) 编辑
摘要:BFS八数码问题: #include <iostream> #include <cstring> #include <queue> #include <unordered_map> using namespace std; int bfs(string start) { string end = " 阅读全文
posted @ 2020-04-09 19:16 龙雪可可 阅读(139) 评论(0) 推荐(0) 编辑
摘要:DFS全排列: #include <iostream> #include <cstring> using namespace std; const int N = 10; int n,path[N]; bool sta[N]; void dfs(int u) { if(u == n) { for(i 阅读全文
posted @ 2020-04-08 22:40 龙雪可可 阅读(100) 评论(0) 推荐(0) 编辑
摘要:区间和: #include <iostream> #include <vector> #include <algorithm> using namespace std; const int N = 300000; int a[N],s[N]; typedef pair<int, int> PII; 阅读全文
posted @ 2020-04-08 11:39 龙雪可可 阅读(124) 评论(0) 推荐(0) 编辑
摘要:前缀和子矩阵: #include <iostream> using namespace std; const int N = 1010; int a[N][N],s[N][N]; int main() { int n,m,k; cin>>n>>m>>k; for(int i = 1;i<=n;i++ 阅读全文
posted @ 2020-04-07 00:42 龙雪可可 阅读(146) 评论(0) 推荐(0) 编辑
摘要:输入样例: 6 3 1 2 2 3 3 4 3 4 5 输出样例: 3 4 5 5 -1 -1 #include <iostream> using namespace std; const int N = 100010; int a[N]; int main() { int n,q,x; cin>> 阅读全文
posted @ 2020-04-04 23:01 龙雪可可 阅读(528) 评论(0) 推荐(0) 编辑

****************************************** 页脚Html代码 ******************************************
点击右上角即可分享
微信分享提示