基础算法
小魚兒.
天下皆白,唯我独黑!
展开
-
11.7 背包问题(完全背包)基础算法
#include <cstdio>//完全背包问题——物品件数无穷型 for(int i=1;i<=n;++i){ for(int v=w[i];v<=V;++v) { //有两种选择,选第i件物品,不选第i件物品 dp[i][v]=max(dp[i-1][v],dp[i][v-w[i]]+c[i]); //与01背包唯一区别是第二个参数是dp[i]...原创 2019-11-14 14:53:01 · 184 阅读 · 0 评论 -
11.7 背包问题(01背包)基础算法
#include <cstdio>//01背包问题for(int i=1;i<=n;++i){ for(int v=w[i];v<=V;++v) { //有两种选择,选第i件物品,不选第i件物品 dp[i][v]=max(dp[i-1][v],dp[i-1][v-w[i]]+c[i]); }}//利用滚动数组进行空间优化for(int i=...原创 2019-11-14 14:29:54 · 143 阅读 · 0 评论 -
11.5 最长回文字串(动态规划)
#include <cstdio>#include <cstring>const int maxn=1010;char s[maxn];int dp[maxn][maxn];int main(){ gets(s); int len =strlen(s),ans=1; memset(dp,0,sizeof(dp)); //边界 for(int i=0;...原创 2019-11-13 15:11:10 · 96 阅读 · 0 评论 -
11.4 最长公共子序列(LCS)——动态规划
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=100;char a[N],b[N];int dp[N][N];int main(){ gets(a+1);//从下标1开始读入 gets(b+1); int len...原创 2019-11-13 14:37:02 · 76 阅读 · 0 评论 -
28 、判断子串在str中出现的次数
#include <cstdio>#include <cstring> using namespace std;//判断子串出现的次数 int occurNum(string str,string substr){ int i=j=k=sum=0; //k记录每次判断的起始位置 while(i<str.size()) { if(str[i]==...原创 2019-11-12 20:24:56 · 111 阅读 · 0 评论 -
11.1 code up 问题 A: Fibonacci(动态规划递归写法)
问题 A: Fibonacci题目描述The Fibonacci Numbers{0,1,1,2,3,5,8,13,21,34,55...} are defined by the recurrence:F0=0 F1=1 Fn=Fn-1+Fn-2,n>=2Write a program to calculate the Fibonacci Numbers.输入Eac...原创 2019-11-09 15:28:28 · 125 阅读 · 0 评论 -
11.1.3 动态规划递推写法(数塔问题)
//数塔问题——从塔顶向下的路径最大值#include <cstdio>#include <algorithm>using namespace std;const int maxn=1000;int f[maxn][maxn],dp[maxn][maxn];int main(){ int n; scanf("%d",&n); for(int i...原创 2019-11-09 15:12:30 · 113 阅读 · 0 评论 -
11.1 动态规划初步(递归写法)
#include <cstdio>using namespace std;//11 动态规划 //1、坡博纳妾数列//1.1递归写法int F(int n){ if(n==0||n==1) return 1; else return F(n-1)+F(n-2);}// 1.2利用dp数组存储已经计算过的结果——记忆化搜索 int dp[maxn]...原创 2019-11-09 14:54:57 · 215 阅读 · 0 评论 -
10.6 拓扑排序(判断给定图是否是有向无环图)
//拓扑排序#include <cstdio>#include <vector>#include <queue>using namespace std;vector<int> G[maxv]; //邻接表int n,m,inDegree[maxv]; //顶点数、入度 bool topologicalSort() //拓扑排序 {...原创 2019-11-09 14:31:08 · 383 阅读 · 0 评论 -
10.5.3 最小生成树——kruskal算法
#include <cstdio>#include <algorithm>using namespace std;//最小生成树——kruskal算法struct edge{ //边的定义 int u,v;//边的两个端点编号 int w; //边的边权 }E[maxe];//最多有maxe条边bool cmp(edge a,edge b)//排序函数...原创 2019-11-07 15:08:52 · 151 阅读 · 0 评论 -
10.5 最小生成树——prim算法
#include<cstdio>#include <vector>using namespace std;//求最小生成树——Prim算法——从一点出发逐步扩散求解//1、伪代码 prim(G,d[]){ 初始化; for(循环n次) { u=使d[u]最小的还未被访问的顶点的编号; 记u以访问; for(从u出发能到达的所有顶点v) {...原创 2019-11-06 15:51:30 · 266 阅读 · 0 评论 -
10.4.3 全源最短路径——Floyd算法
#include <cstdio>#include <algorithm>using namespace std;//Floyd 算法——全源最短路径//伪代码/*枚举顶点k∈[1,n] 以顶点k作为中介点,枚举所有顶点对i和j(i∈[1,n],j∈[1,n] ) 如果dis[i][k]+dis[k][j]<dis[i][j]成立 //找到以k为中...原创 2019-11-06 15:04:36 · 180 阅读 · 0 评论 -
SPFA算法——优化后的Bellman算法
#include <cstdio>#include <queue>#include <vector>using namespace std;//优化后的Bellman算法——SPFA//1、伪代码queue <int> q;q.push(s) ;//源点s入队while(!q.empty()) //队列非空{ int u=q...原创 2019-11-06 14:38:57 · 128 阅读 · 0 评论 -
10.4 Bellman-Ford 算法求最短路径(可求解负权值)(基础算法)
//Bellman-Ford 算法求最短路径(可求解负权值)//伪代码for(int i=0;i<n-1;++i) //执行n-1轮操作 { for(each edge u->v) { if(d[u]+length[u->v]<d[v]) //以u为中介点可以使d[v]更小 d[v]=d[u]+length[u->v]; //松弛操作 }...原创 2019-11-05 14:55:06 · 149 阅读 · 0 评论 -
最短路径第二尺度求解优化算法(Dijkstra+DSF)
#include <cstdio>#include <cstring> #include <algorithm>#include <vector>using namespace std;const int maxv=520;const int INF=1000000000;//利用pre数组先求出每个点的点权或边权之和的模板。可直...原创 2019-11-02 16:04:42 · 361 阅读 · 0 评论 -
10.4 最短路径(黑暗大陆——亚历山大)
#include <cstdio>#include <algorithm>using namespace std;const int maxv=1122;const int INF=1000000000;int n,m,s,G[maxv][maxv];int d[maxv];bool vis[maxv]={false};void Dijkstra(int...原创 2019-10-30 15:28:00 · 86 阅读 · 0 评论 -
10.4 最短路径相关算法——点权、边权、最短路径条数(基础算法)
#include <cstdio>#include <vector>using namespace std;//单源最短路径——Dijkstra算法//1、伪代码//G为图,一般设成全局变量 ,数组d为源点到达各点的最短路径长度/*Dijstra(G,d[],s){ 初始化; for(循环n次) { u=使d[u]最小的还未被访问的顶点的标号 ...原创 2019-10-30 15:07:13 · 1640 阅读 · 0 评论 -
第八章 排序算法总结
//第八章——排序一、插入类排序 //1、直接插入排序void insertsort(int R[],int n){ int i,j; int temp; for( i=1;i<n;++i) { temp=R[i]; //将待排序关键字暂存于temp j=i-1; while(j>=0&&temp<R[j]) { R[j+...原创 2019-10-29 20:31:17 · 195 阅读 · 0 评论 -
第十章 图(BFS基础算法)
//图的广度优先遍历BFS//利用队列,从出发点将第一个顶点入队,队列不空时出队,并将该顶点所能到达的所有顶点//入队,并在出队时访问。直至队列空//伪代码 #include <cstdio>#include <queue>using namespace std;BFS(u){ queue< > q; //定义队列 将u入队; inq...原创 2019-10-25 16:34:39 · 105 阅读 · 0 评论 -
10 图算法初步——基础知识准备
图的相关基础知识准备:#include <cstdio>#include <vector>using namespace std;//第十章!图//1 图的遍历//DFS//伪代码/*DFS(u){ vis[u]=true; //1设置u已被访问 for(从u出发能到达的所有顶点)//2枚举从u出发可以到达的所有顶点v { if(vis[...原创 2019-10-24 16:01:59 · 134 阅读 · 0 评论 -
9.7 堆排序基础知识准备
堆排序基础知识:#include <cstdio>//堆排序//因为堆是一棵完全二叉树,固可用数组来表示const int maxn=100;int heap[maxn],n=10;//heap 为堆,n为元素个数//堆由上向下调整:将每个结点V与其孩子比较,若有比其大的,则交换他们的位置//直到没有比他大的或没有孩子结点//对heap数组在[low,high]...原创 2019-10-24 16:04:14 · 106 阅读 · 0 评论 -
9.0树与二叉树基础算法
#include <cstdio>#incldue <queue>#include <stack>using namespace std;//二叉树 struct node{ typename data; node* lchild; node* rchild;};node *root=NULL;//1建立新结点,v为结点权值node...原创 2019-10-24 16:13:17 · 105 阅读 · 0 评论 -
9.0二叉树静态写法
//二叉树的静态实现//静态是指;结点的左右指针域用int型代替,用来表示左右子树的根节点在数组中的下标。//为此要建立一个大小为结点上限个数的node型数组,所有动态生成的结点都直接使用数组中的结点//所有指针的操作都改为对数组下标的访问//结点定义struct node{ typename data; int lchild; int rchild;}Node[maxn];...原创 2019-10-24 16:12:11 · 167 阅读 · 0 评论 -
9.3 静态树写法
#include <cstdio>#include <vector>#include <queue>using namespace std;//树的算法//1、静态写法const int maxn=110;struct node { int data; //typename data; vector<int> child;//...原创 2019-10-24 16:10:41 · 149 阅读 · 0 评论 -
9.4 二叉查找树基础算法
#include <cstdio>#include <queue>using namespace std;struct node{ typename data; node* lchild; node* rchild;};node *root=NULL;//1建立新结点,v为结点权值node * newnode(int v){ node *Node...原创 2019-10-24 16:09:38 · 70 阅读 · 0 评论 -
9.5 平衡二叉树AVL树基础算法
#include <cstdio>#include <algorithm>using namespace std;//AVL 树//1、结点struct node{ int v,height;//v为结点权值,height为当前子树高度 node *lchild,*rchild ;};//新建结点node * newnode(int v){ no...原创 2019-10-24 16:08:15 · 187 阅读 · 0 评论 -
9.6并查集基础知识
#include <csdio>#include <algorithm>using namespace std;//并查集——集合的查、并 //1初始化//一开始,每个元素都是独立的一个集合,因此需令所有的father[i]=i;int father[1122];//father[i]表示元素i的父亲结点 for(int i=1;i<=N;++i)...原创 2019-10-24 16:05:47 · 120 阅读 · 0 评论