![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
刷过的一些算法题
Coding4What
这个作者很懒,什么都没留下…
展开
-
动态规划求LCS
给定两个序列A和B,求长度最大的公共子序列(LCS)。设dp[i][j]为从A1,A2...Ai和B1,B2...Bj的LCS长度,则当A[i]=B[j]时,dp[i][j]=d[i-1][j-1]+1;否则,dp[i][j]=max(dp[i][j-1],dp[i-1][j]);时间复杂度为O(nm),n和m分别为序列A和B的长度。hdu 1159(LCS入门题)#include<bits...原创 2018-06-07 19:13:13 · 229 阅读 · 0 评论 -
LIS的nlogn算法的两种实现
对于hdu 1950求LIS的问题,若使用常规的n^2算法会超时,所以需要用到LIS的nlogn算法求解。一、定义d[k]:长度为k的LIS的最小末尾元素,易知d中元素单调递增。首先len=1,d[1]=a[1]。对于a[i],若a[i]>d[len],则可将a[i]拼接在d[len]后成为更长的LIS,所以d[++len]=a[i];否则,我们要从d[1]到d[len-1]中找到一个j,满...原创 2018-06-04 09:14:53 · 1917 阅读 · 1 评论 -
POJ 棋盘问题
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int n,m,c;char s[10][10];int vis[10];void dfs(int x,int k){ if(k==m){ c++; return;...原创 2019-03-26 16:02:21 · 170 阅读 · 0 评论 -
迷宫问题
题目链接:https://cn.vjudge.net/contest/289570#status/jsu20164042033/H/0/BFS求最短路,前驱数组pre记录搜索路径。#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<...原创 2019-03-26 15:44:32 · 140 阅读 · 0 评论 -
HDU 畅通工程续
#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;int main(){ int i,j,n,m,x,y,w,k,p,q; int a[205][205]; while(cin>>n>>m){ for(i=0;i<n;i++){...原创 2019-03-26 15:55:43 · 181 阅读 · 0 评论 -
Fleury算法求欧拉回路/欧拉路径
Fleury算法设G为一无向欧拉图,求G中一条欧拉回路的算法为:1) 任取G中一顶点v0,令P0 = v0;2) 假设沿Pi = v0e1v1e2v2 …eivi走到顶点vi,按下面方法从E(G)={ e1, e2, …, ei}中选ei+1:a) ei+1与vi相关联;b) 除非无别的边可供选择,否则ei+1不应该是Gi = G - { e1, e2, …, ei}中的桥。(桥:图中的一条边,若...原创 2018-06-05 21:23:09 · 1782 阅读 · 1 评论 -
欧拉线性筛
一个合数x与一个质数y的乘积可以表示成一个更大的合数z与一个更小的质数a的乘积!例如: 如果i=8; 那么由于i%2==0; 因此对于i=8就只需要检查primes[1]=2即可,因为对于大于primes[1]的质数,像3,有:8*3 = 2*4*3 = 12*2,也就是说24(8*3=24)并不需要在8时检查,在12时才检查。#include<bits/stdc++.h>...原创 2019-03-26 15:50:55 · 221 阅读 · 0 评论 -
PTA 家庭房产
#include<bits/stdc++.h>using namespace std;struct node{ int id,fid,mid,num,space;};struct man{ int fa; int id; int pnum; double num; double space; man() { ...原创 2019-03-26 15:59:31 · 485 阅读 · 0 评论 -
二叉树的层序遍历
#include<bits/stdc++.h>using namespace std;typedef struct bitnode{ char data; struct bitnode *lchild,*rchild;}Bitnode;Bitnode *creatbittree(Bitnode *T){ char ch; scanf("%c",&ch); i...原创 2019-03-26 15:58:46 · 192 阅读 · 0 评论 -
HDU 还是畅通工程
#include<iostream>#include<cstdio>#include<vector>#include<algorithm>using namespace std;struct road{ int from; int to; int value;};vector<road> v;in...原创 2019-03-26 15:57:27 · 145 阅读 · 0 评论 -
HDU 畅通工程再续
#include<iostream>#include<cstdio>#include<vector>#include<algorithm>#include<cmath>#include<cstring>using namespace std;struct node{ int x; int y;...原创 2019-03-26 15:56:32 · 113 阅读 · 0 评论 -
HDU 畅通工程
#include<iostream>using namespace std;int f[1005];int getparent(int x){ while(x!=f[x]) x=f[x]; return x;}int merge(int a,int b){ int t1=getparent(a); int t2=getparent(b); ...原创 2019-03-26 15:53:46 · 134 阅读 · 0 评论 -
线段树的lazy标记
题目最多给到10万个操作,简单的线段树会超时,需要用到lazy标记。在区间修改时,如果每次都更新到叶子节点会非常耗费时间,为节省时间,当某次更新的区间与当前更新的区间一致的话,则本次更新仅更新该节点,并将该节点的子节点用lazy标记, lazy标记意味着本节点已经更 新过了,而本节点的子节点仍需根据标记信息进行更新。等到下次用到时再根据lazy标记的信息更新子节点,并将lazy标...原创 2018-06-14 17:56:35 · 492 阅读 · 0 评论 -
根据前序与中序输出后序
因为前序最先访问的一定是根节点,所以我们可以令root为前序中当前根节点的下标,通过找到pre[root]在中序中的位置,可以将中序的左子树与右子树划分出来。start与end划定子树的节点在中序中的范围,递归打印后序序列,出口为start>end。#include<bits/stdc++.h>using namespace std;int in[50],pre[50];i...原创 2018-06-11 12:50:08 · 786 阅读 · 0 评论 -
根据后序与中序输出前序
因为后序最后访问的一定是根节点,所以我们可以令root为后序中当前根节点的下标,通过找到post[root]在中序中的位置,可以将中序的左子树与右子树划分出来。start与end划定子树的节点在中序中的范围,递归打印前序序列,出口为start>end。#include<bits/stdc++.h>using namespace std;int in[50],post[50];...原创 2018-06-11 12:54:36 · 256 阅读 · 0 评论