Algorithm
文章平均质量分 59
AAAAAAAAAAAAAAA
todaycode
这个作者很懒,什么都没留下…
展开
-
KMP
#include <iostream>using namespace std;const int N=100010;int ne[N];int main(){ string s,r;cin>>s>>r; int m=s.size();s=" "+s; int n=r.size();r=" "+r; for(int i=2,j=0;i<=n;i++) { while(j&&.原创 2020-08-13 14:25:49 · 79 阅读 · 0 评论 -
34道DP
1、方格取数Ⅰ设有 n×m 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊会取走所有经过的方格中的整数,求它能取到的整数之和的最大值。#include <iostream>#include <iostream>#include <cstring>#include <algorithm>using namespace std;原创 2021-05-13 16:35:14 · 283 阅读 · 0 评论 -
排列和组合型搜索
全排列#include <iostream>using namespace std;const int N = 20;int n;int path[N];bool st[N];void dfs(int u){ if(u==n) { for(int i=0;i<n;i++) cout<<path[i]<<' '; cout<<endl; return ; }原创 2021-02-28 23:40:05 · 107 阅读 · 0 评论 -
堆排序
#include <iostream>#include <algorithm>using namespace std;const int N = 100010;int h[N],size1;void down(int u){ int t = u; if (2 * u <= size1 && h[2 * u] < h[t]) t = 2 * u; if (2 * u + 1 <= size1 && h[2 * u +.原创 2020-11-01 21:41:29 · 48 阅读 · 0 评论 -
蛇型矩阵
#include <iostream>using namespace std;const int N = 150;int a[N][N];int main(){ int n, m; cin >> n >> m; int x = 0, y = 0; //初始坐标坐标,(0,0) int cnt = 1; //初始化第一个数 a[x][y] = cnt; while (cnt < n * m) .原创 2020-11-01 21:41:42 · 78 阅读 · 0 评论 -
中缀转为后缀表达式
/*用数组stack[]模拟栈,变量s相当于栈顶指针*/ #include<stdio.h>#include<string.h>#define N 666void main(){ int i,s=-1,t=0;//s为栈顶指针,t为以保存到ch[]字符的个数 char str[N+1],stack[N+1],ch[N+1];//输入的字符串、模拟栈、输...原创 2020-04-14 12:19:53 · 77 阅读 · 0 评论 -
广度优先算法
打印输出0000-1111所有的二进制数#include <stdio.h>#include <queue>using namespace std;typedef struct { int data[10]; int level; }DS;queue <DS> q;int main(){ DS ...原创 2020-04-18 17:57:34 · 115 阅读 · 0 评论 -
链表做加法
#include <iostream>using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x):val(x),next(NULL) {}};void create(ListNode *L){ int t=L->val;ListNode *q=L; while(t) { int x=t%10; ListNode *p=new ListNode(x); p-.原创 2020-06-27 15:39:40 · 179 阅读 · 0 评论 -
计数排序+
#include <iostream>#include <cstring>using namespace std;void countSort(int a[],int size){ int max = a[0];//序列中的最大值 int min = a[0];//序列中的最小值 for(int i=0;i<size;++i) a[i]+=1000;//考虑到序列中可能存在-负数-,对整个集体统一加上一个偏移量,使元素非负 for(int i=0;i<.原创 2020-06-24 13:07:47 · 93 阅读 · 1 评论 -
导弹拦截
#include<iostream>#include<cstring> using namespace std; const int N=101;int heigh[N];int next[N];int main(){ int n; while(cin>>n&&n) { int sum=0;int num[N]; memset(num,0,sizeof(num)); for(int i=1;i<=n;++i) .原创 2020-06-24 13:06:09 · 120 阅读 · 0 评论 -
堡垒问题
#include<stdio.h> char T[101][101]={0}; int n,max=0;int check(int k){ int r=k/n,flag1=0; int c=k%n,flag2=0; if(T[r][c]=='X') return 0; for(int i=r-1;i>=0;--i) if(T[i][c]=='X') break; else if(T[i][c]=='1') { flag1=1;brea.原创 2020-06-19 16:17:03 · 249 阅读 · 0 评论 -
快速幂
#include <iostream>using namespace std;typedef unsigned long long ULL;ULL qmi(ULL a,int k,int p){ ULL res=1%p; while(k) { if(k&1) res=(res*a)%p; a=(a*a)%p; k>>=1; } return res;}int main(){.原创 2020-08-14 09:46:25 · 77 阅读 · 0 评论 -
最少硬币问题
#include <iostream>using namespace std;const int INF=999;int n,T[11],Coins[11],m;int c[100][999];int index(int r)//根据行号找到其对应类型 { for(int i=1,s=0;i<=n;++i) for(int k=1;k<=Coins[i];++k,s++) if(s==r) return i; return -1; } in.原创 2020-06-13 15:10:03 · 407 阅读 · 0 评论 -
整数二分
#include<iostream>using namespace std;int find1(int a[],int val){ int l=0,r=5; while(l<r) { int mid=l+r>>1; if(a[mid]>=val) r=mid;//砍右 else l=mid+1; } return r+1;}int find2(int a[],int val.原创 2020-08-13 14:53:13 · 90 阅读 · 0 评论 -
qSort(a,low,high)
#include <iostream>using namespace std;int partition(int a[],int low,int high){ int tmp=a[low]; while(low!=high) { while(low<high&&a[high]>=tmp) high--; if(low<high) {a[low]=a[high];low++; } while(low<high&&a[.原创 2020-07-14 14:45:28 · 257 阅读 · 0 评论 -
0-1背包(动态规划)
#include <iostream>#define MAX 1001using namespace std;struct Item{ int value; int weight;};int n,W;int c[MAX][MAX];Item items[MAX];int main(){ cin>>n; cin>>W; for(int i=1;i<=n;++i) cin>>items[i].weight.原创 2020-05-21 19:16:48 · 130 阅读 · 0 评论 -
背包问题 (贪心思想)
描述:有N个物品装入一个容量为C的背包,每个物品的重量和价值已知,且物品可以部分装入(计算价值时,按重量比值计算)#include <stdio.h>int N,C;//物品个数、包的容量 举例:int w[666],//各物品的重量 w[]={10, 20, 30}; p[666],//各物品的价值 p[]={60,100,120}; p_[...原创 2020-04-22 20:24:11 · 709 阅读 · 0 评论 -
报数问题——甲乙丙丁
#include <iostream>using namespace std;int n,a[4],x[10001]; int check(int t){ if(t%7==0) return 0; while(t!=0) { if(t%10==7) return 0; t/=10; } return 1; }void f(){ for(int i=1;i<10001;++i) if(check(i)) x[i]=i; int co.原创 2020-06-06 18:06:59 · 541 阅读 · 0 评论 -
两邮局选址问题
#include<iostream>#include<algorithm>#include<cmath>using namespace std;int a[1001];int f(int s,int f){ int mind=999;//n个居民点到邮局的最小距离 for(int x=a[s];x<=a[f-1];++x) { int d=0; for(int i=s;i<f;++i) { d+=abs(x-a[i]);.原创 2020-06-05 12:43:29 · 691 阅读 · 2 评论 -
蛇与梯子 plus
#include <iostream>using namespace std;int n,a[101],b[101];//a记录当前格子内情况,b记录上一次格子情况 struct obstacle{ int from; int to;}x[101];int f(int size,int m){ for(int i=1;i<size*size;i++) a[i]=0;a[0]=1; int s...原创 2020-05-30 11:24:31 · 327 阅读 · 0 评论 -
n位m进制数 (深度优先搜索)
#include <iostream>using namespace std;int n,m,a[101];void f(int t){ if(t==n) { for(int i=0;i<n;++i) cout<<a[i]; cout<<endl; } else { for(int i=0;i<m;i++) a[t]=i,f(t+1); }}int main(){ n=2,m=10;//2位十进制 f.原创 2020-05-29 11:51:12 · 374 阅读 · 0 评论 -
字符串哈希
#include<iostream>using namespace std;const int N=100010;typedef unsigned long long ULL;ULL h[N],p[N];int n,m,P;string str;void init(){ P=13331;p[0]=1; for(int i=1;i<=n;i++) { h[i]=h[i-1]*P+str[i]; p[i]=p[i-1]*.原创 2020-08-14 09:57:41 · 66 阅读 · 0 评论 -
高精度除法 divide
#include <iostream>#include <algorithm>#include <vector>using namespace std;vector<int> divide(vector<int> A,int b,int& r){ vector<int> C; r=0; for(int i=A.size()-1;i>=0;i--) { r=r*10.原创 2020-08-14 09:49:56 · 168 阅读 · 0 评论 -
N皇后问题(非递归)---全排列(广度优先)
#include <iostream>#include <algorithm>#include <queue>using namespace std;typedef struct DataStru{ int data[10];//保存排列结果 int end;//下标end及其之前已进行全排列 }DS;DS item;int check(DS item,int n){ for(int t=1;t<=n;++t) for(int i=1.原创 2020-05-27 21:20:33 · 407 阅读 · 1 评论 -
大位数 乘mul 加add
#include <iostream>#include <vector>using namespace std;vector<int> mul(vector<int> A,int b){ vector<int> C; int t=0; for(int i=0;i<A.size();i++) { t+=A[i]*b; C.push_back(t%10); .原创 2020-08-13 14:08:12 · 203 阅读 · 0 评论 -
报数问题
设有n个人站成一排,从左向右的编号分别为1~n, 现在从左向右报数“1,2, 1,2,1,2….”,数到”1”的人出列,数到”2”的人站到队伍最右边。报数过 程反复进行,直到n个人都出列为止。问:报数出队次序刚好为从 1 到 n,则这 n 个人的最初从左向右的站队的次序是 什么?#include <iostream>#include <queue>#define N 1001using namespace std;int n,in[N],out[N];void fun原创 2020-05-30 11:11:07 · 2383 阅读 · 3 评论 -
多机调度
#include <iostream>#include <algorithm>#define N 1001using namespace std;int n,m,a[N],b[N];int indexMin(int b[],int m) //找到当前处于空闲的机器{ int t=0,min=b[0];//最初默认下标为0的机器空闲 for(int i=1;i<m;i++) if(b[i]<min) min=.原创 2020-05-27 10:07:55 · 266 阅读 · 0 评论 -
数字三角形(递归+递推)
#include <iostream>#include <algorithm>using namespace std;const int N=1001;int n,d[N][N];int m[N][N];int trace[N];int maxSum1(int i,int j){//方法一:带备忘录的递归 if(m[i][j]) return m[i][j]; if(i==n-1) return m[i][j]=d[i.原创 2020-05-30 11:11:59 · 388 阅读 · 0 评论 -
装载问题
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;int a[101],b[101];//a为每个货箱的重量//b为货箱重量降序排列int load(int C1,int C2,int n)//货箱的个数 { for(int i=0;i<n;++i) b[i]=a[i]; sort(b,b+n,greater<int>());/.原创 2020-05-26 18:19:42 · 243 阅读 · 1 评论 -
装箱问题
#include <bits/stdc++.h>using namespace std;const int N=1001;int n,V,v[N];int R[N];//某个箱子已装入体积int Greed()//用贪心法求得使用箱子数的最小值{ int k=0; for(int i=0;i<n;++i) { if(v[i]>V) return -1;//箱子无法装入某个物品 if(R[k].原创 2020-05-27 10:02:04 · 350 阅读 · 2 评论 -
高精度减法 sub
#include <iostream>#include <vector>using namespace std;vector<int> sub(vector<int> A,vector<int> B){ vector<int> C; int t=0; for(int i=0;i<A.size();i++) { t=A[i]-t; if(i<B.size.原创 2020-08-14 09:52:47 · 162 阅读 · 0 评论