- 博客(41)
- 收藏
- 关注
原创 单链表反转 C++实现
节点用指针,新建节点时要用new。注意判断边界,即空表/单节点/两节点.#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct node{ node * next; ...
2019-03-05 21:49:51
469
原创 快速排序及C++实现
1.挑选一个基准值2.小于基准值的数放在大于基准值的数的左边3.将基准值放入中间,即两种数分界的地方,根据挑选的基准值决定如何插入。4.此时,基准值左边的区间小于等于基准值,基准值小于等于右边的区间,这三段有序,但内部无序,所以,将基准值左右两端继续进行快速排序,直到区间长度为1。是一个递归的过程。void quick_sort(int arr[],int left,int...
2019-03-05 11:31:21
1491
原创 堆排序及C++实现
堆排序:1.构建最大堆。2.取出当前堆顶(即待排序数组中最大的元素)3.将取出后的堆重新调整为标准最大堆。(由于原堆只改变了堆顶,只对堆顶进行下放即可恢复最大堆,需注意由于取出元素,堆的大小变小)4.重复2、3,直到所有数被取出。void adjust_heap(int arr[],int now,int siz){ int left=now*2+1; ...
2019-03-05 10:41:36
154
原创 SG函数 SG定理
SG函数int getSG(int n) //计算n个数的SG值{ memset(SG,0,sizeof(SG)); for(int i=1;i<=n;i++){ memset(S,0,sizeof(S)); //初始化 for(int j=0;f[j]<=i && j<N ; j++){ //每...
2018-09-02 09:46:40
350
原创 马拉车算法(Manacher)——最长回文字串
线性求最长回文字串#include<bits/stdc++.h>using namespace std;//马拉车,最长回文字串string Manacher(string s)//返回字符串//int Manacher(string s) //返回长度{ string t="$#";//处理开头 for(int i=0;i<s.size(...
2018-09-01 10:22:04
220
原创 两组数间的匹配
数组a长度为n,数组b长度为m要求两数组进行匹配,且没有数可以同时匹配两个及以上的数问有多少种匹配方法dp[x][y]=y*dp[x-1][y-1]+dp[x-1][y];ll solve(ll x,ll y){ if(x==0 || y==0)return 1; if(x>y){ swap(x,y); } if(d
2017-10-12 08:51:28
697
原创 夹角公式
正切公式设直线 、 的斜率存在,分别为 、 , 与 的夹角为 ,则 .注意:两直线的夹角指的是两直线所成的小于等于90°的角,但是当夹角为90°时,k不存在,故当k存在时,正切值始终为正.余弦公式A1X+B1Y+C1=0........(1)A2
2017-06-24 11:15:53
9275
原创 多重集组合数
未理解,先放个模板在这,感慨一波数学博大精深//有n种物品,第i种有ai个。求从中取出m个,有多少种取法。MOD#includeusing namespace std;const int maxn = 1007;const int maxm = 1007;int a[maxn];int dp[maxn][maxm];//dp[n][m]:从前n种物品中取出m个int mai
2017-05-31 21:15:47
678
原创 划分数
不是很理解,先放个板子在这吧//将n划分成m组#includeusing namespace std;int dp[1010][1010];int main(){ int i,j,k,n,m; scanf("%d%d",&n,&m); dp[0][0]=1; for(i=1;i<=m;i++){ for(j=0;j<=n;j++){
2017-05-31 20:54:31
226
原创 最长公共子序列
for(i=0;i<n1;i++){ for(j=0;j<n2;j++){ if(s1[i]==s2[j]){ dp[i+1][j+1]=dp[i][j]+1; } else { dp[i+1][j+1]=max(dp[i+1][j],dp[i][
2017-05-22 20:55:38
260
原创 最长公共子序列
for(i=0;i<=n1;i++) dp[i][0]=0; for(j=0;j<=n2;j++) dp[0][j]=0; for(i=1;i<=n1;i++){ for(j=1;j<=n2;j++){ if(s1[i]==s2[j]){
2017-04-13 14:32:18
300
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人