ACM
文章平均质量分 81
菜小白—NLP
这个作者很懒,什么都没留下…
展开
-
最大流问题(模板)
一、问题描述在下图的网络中,有一个源点机器sss有一个汇点机器ttt,边的权值表示电缆的传输速度。我们的目标使求解源点sss到汇点ttt的最大流量。二、解题思路 贪心算法:看到这个问题;我们最简单的第一反应就是使用DFS的贪心算法;算法步骤:第一步:使用DFS搜索一条从源点sss到汇点ttt的可以增流的路径(即路径中边的容量c(e)>f(e)c(e)>f(e)c(e)&g...原创 2020-02-14 21:58:38 · 617 阅读 · 0 评论 -
二分图匹配问题(模板)
问题描述:有N台计算机和K个任务;可以给每台机器分配一个任务,每条机器能处理的任务种类各不相同;求最多可能处理多少个任务。其中uuu表示机器;vvv表示任务。...原创 2020-02-15 14:55:35 · 649 阅读 · 0 评论 -
最长公共子序列
题目描述给定两个字符串s1s2…sns_1 s_2…s_ns1s2…sn和t1t2…tmt_1 t_2…t_mt1t2…tm。求这两个字符串的最长的公共子序列。字符串s1s2…sns_1 s_2…s_ns1s2…sn的子序列指可以表示为si1si2…sim(i1<i2<⋯<im)s_{i_1} s_{i_2}…s_{i_m} (i_1...原创 2019-04-08 17:05:38 · 278 阅读 · 0 评论 -
多重部分和问题
题目描述:有nnn中大小不同的数字aia_iai,每种数字mim_imi,判断是否可以从这些数字之中选出若干使它们的和恰好为KKK。限制条件:1≤n≤1001≤n≤1001≤n≤1001≤ai,mi≤1000001≤a_i,m_i≤1000001≤ai,mi≤1000001≤K≤1000001≤K≤1000001≤K≤100000题解:一般动态规划:步骤:dp...原创 2019-04-16 14:05:15 · 329 阅读 · 0 评论 -
划分数问题
题目描述:有nnn个无区别的物品,将他们划分成不超过mmm组,求划分方式模MMM的余数。限制条件:1≤m≤n≤10001≤m≤n≤10001≤m≤n≤10000≤M≤100000≤M≤100000≤M≤10000题解:动态规划:步骤:dp数组含义:dp[i][j]=dp[i][j]=dp[i][j]=将j划分为到不超过iii组中的划分总数。初始条件:dp[1][0−n...原创 2019-04-22 20:38:24 · 530 阅读 · 0 评论 -
最长上升子序列问题
题目描述:又有一长为n的数列:a0,a1,…,an−1a_0,a_1,…,a_{n-1}a0,a1,…,an−1.求出这个序列中最长的上升子序列长度。上升子序列指的是对于任意i<ji<ji<j都满足ai<aja_i<a_jai<aj。限制条件:i≤n≤1000i≤n≤1000i≤n≤10000≤ai≤100...原创 2019-04-18 15:47:16 · 351 阅读 · 0 评论 -
优先队列
1、优先队列:能够完成以下两个操作的数据结构叫优先队列:可以插入新元素可以快速取出所有元素的最值。2、优先队列的实现:堆堆是一颗完全二叉树。重要的性质:父节点一定是其所有子孙节点的最值。一个简单的堆的示意图如下:堆的插入:首先在堆的末尾插入该数值,然后不断向上调整,直到没有大小颠倒为止。取出最值:最值就在堆顶,即二叉树的第一个元素。删除最值:首先将堆的最后一个元素复...原创 2019-04-29 11:46:28 · 21195 阅读 · 2 评论 -
多重组合数问题
题目描述:有nnn种物品,第i种物品有aia_iai个,不同种类物品可以相互区分但相同种类的物品无法区分。从这些物品中取出mmm个的话,有多少种取法,求出方案数模MMM的余数。限制条件:1≤m,n,ai≤10001≤m,n,a_i≤10001≤m,n,ai≤10000≤M≤100000≤M≤100000≤M≤10000样例说明:输入:n=3m=3a={1,2,3}...原创 2019-04-24 21:17:45 · 799 阅读 · 0 评论 -
二叉搜索树
二叉索引树的性质:所有节点都满足左子树的所有节点比自己小,右子树的节点比自己大。二叉索引树的操作:查找:直接从根节点往下一个个比较即可,小面是查找10的过程图:插入:和查找的过程一样,只是最后没查找到,就生成一个叶子节点。下面是插入6的过程图:删除:有三种情况:要删除的结点是叶结点:直接删除要删除的结点只有一个孩子结点: 将其父结点的指针指向要删除结点的孩子结点要删除的结点...原创 2019-04-30 18:31:49 · 233 阅读 · 0 评论 -
平衡二叉树
排序二叉树的退化:上一篇博客写了一下排序二叉树,但是排序二叉树有一个退化问题:假设我们向排序二叉树中依次插入[1,2,3,5,6,....,N][1,2,3,5,6,....,N][1,2,3,5,6,....,N]就会生成如下图的排序二叉树:这就成为了一条单列表一样。退化后的排序二叉树的时间复杂度为:O(n)O(n)O(n)为了避免排序二叉树的退化我们产生了平衡二叉树。平衡二叉树:...原创 2019-05-07 17:30:40 · 323 阅读 · 0 评论 -
01背包问题——大背包:
题目描述:有n个物品,每个物品有两个属性:一个是体积wiw_iwi,一个是价值v1v_1v1,可以表示为:{(w1,v1),(w1,v1),…,(w1,vn)}\{(w_1,v_1 ),(w_1,v_1 ),…,(w_1,v_n )\}{(w1,v1),(w1,v1),…,(w1,vn)}。同时我们还有一背包,背包的容量用W表示。现在我们将物品放入背包,放入的物品体积的总和不得...原创 2019-04-11 16:10:16 · 4433 阅读 · 0 评论 -
完全背包问题
题目描述:有n种体积和价值分别为wi,viw_i,v_iwi,vi的物品。有一个容量为W(体积)的背包。求出背包能装下的最大价值,每种物品的数量是无限的。 解题思路:- 动态规划法:dp数组含义:dp[i][j]dp[i][j]dp[i][j]=从编号为1−i1-i1−i的物品中挑选物品放入容量为jjj的背包中能得到的最大价值。注意:n种物品编号范围为1-n,0做作递推的起点。...原创 2019-04-10 18:22:48 · 11109 阅读 · 4 评论 -
扩展欧几里得算法
一、题目描述 在平面上有一个两端无限延伸的数组如下图所示,0为起点,1是终点,现在有四种走法,向正方向走a步,向负方向走a步,向正方向走b步,向负方向走b步。在任给两个数a,b问能否从起点走到终点。 二、样例 输入:a=4,b=11 输入:Yes(a+a+a-b)三、解题报告 该题实际要求的是,满足ax+by=1的整数解原创 2018-01-06 11:29:29 · 2768 阅读 · 1 评论 -
素数问题
#include #include using namespace std;bool Judge_prime(int n){ if(n==1) return false; for(int i=2;i*i<=n;i++) if(n%i==0) return false; return true;}int原创 2018-01-06 21:34:09 · 324 阅读 · 0 评论 -
快速幂运算
#include #include using namespace std;typedef long long int LL;LL fast_pow(LL x,LL n,LL m){ LL result=1; while(n>0) { if(n&1) result=(result*x)%m; x=(x*x)原创 2018-01-07 10:37:26 · 325 阅读 · 0 评论 -
poj3641—素数判断+快速幂运算
素数判断链接 快速幂运算链接#include #include using namespace std;typedef long long int LL;bool Judge_prime(LL n){ if(n==1) return false; for(LL i=2; i*i<=n; i++) if(n%i==0)原创 2018-01-07 20:30:49 · 387 阅读 · 0 评论 -
并查集
#include <iostream>#include <cstdio>#define Max 1000using namespace std;int Set[Max];//Set[i]=j表示i的父节点是jint high[Max];//记录树高int n;//元素个数void init()//并查集初始化{ for(int i=0;...原创 2018-01-10 23:02:52 · 511 阅读 · 0 评论 -
堆
#include <iostream>#include <stdio.h>#define Max 1000using namespace std;//大顶堆int heap[Max];//堆的存放数组void down_adjust(int x)//将x向下调节{ int temp=heap[x]; int y=2*x; ...原创 2018-01-11 09:32:58 · 269 阅读 · 0 评论 -
最小生成树
#include <iostream>#include <cstdio>#define Max 1000#define Inf 1000000using namespace std;int G[Max][Max];//图的邻接矩阵bool use[Max];//标记C_1集合与C_2集合int V,E;int sum;//最小生成树的权值之和i...原创 2018-01-10 22:54:54 · 531 阅读 · 0 评论 -
最短路径
#include <iostream>#include <cstdio>#define Max 100000#define Inf 100000000using namespace std;struct edge{//边的结构体 int from; int value; int to;};edge G[Max];//边...原创 2018-01-08 22:23:26 · 267 阅读 · 0 评论 -
01背包问题
题目描述:有n个物品,每个物品有两个属性:一个是体积wiw_iwi,一个是价值v1v_1v1,可以表示为:(w1,v1),(w1,v1),…,(w1,vn){(w_1,v_1 ),(w_1,v_1 ),…,(w_1,v_n )}(w1,v1),(w1,v1),…,(w1,vn)。同时我们还有一背包,背包的容量用W表示。现在我们将物品放入背包,放入的物品体积的总和不得超过背包的体积...原创 2019-04-04 19:41:40 · 1193 阅读 · 0 评论 -
辗转相除法——求最大公约数
一、题目描述 在一个由1×1的格子组成的平面上,给出两个格子的交点P1(x1,y1)和P2(x2,y2).要求计算出线段P1P2上还有多少格子交点。 二、样例 输入:P1=(1,11),P2=(5,3) 输出:3{(2,9),(3,7),(4,5)}三、解题思路 先将线段当作向量P1P2将P1移到坐标原点,向量为原创 2018-01-06 10:00:34 · 2014 阅读 · 0 评论