算法
文章平均质量分 92
算法基础
PikaVanderbilt
这个作者很懒,什么都没留下…
展开
-
第五篇——动态规划
动态规划 目录动态规划背包问题背包问题完全背包问题多重背包问题I多重背包问题II分组背包问题线性DP数字三角形最长上升子序列I最长上升子序列II最长公共子序列最短编辑距离编辑距离区间DP石子合并计数类DP整数划分数位统计DP计数问题状态压缩DP蒙德里安的梦想最短Hamilton路径树形DP没有上司的舞会记忆化搜索滑雪 背包问题 背包问题 核心套路 优化一般就是优化状态转移方程 01背包 特点:每个物品仅能使用一次 重要变量&公式解释 f[i][j]:表示所有选法集合中,只从前i个物品中选,并且总体积原创 2021-05-20 09:44:38 · 133 阅读 · 0 评论 -
第三篇——搜索与图论
DFS 排列数字 n皇后问题 算法一: #include <iostream> using namespace std; const int N = 20; // bool数组用来判断搜索的下一个位置是否可行 // col列,dg对角线,udg反对角线 // g[N][N]用来存路径 int n; char g[N][N]; bool col[N], dg[N], udg[N]; void dfs(int u) { // u == n 表示已经搜了n行,故输出这条路径 i原创 2021-05-18 21:25:08 · 154 阅读 · 2 评论 -
第二篇——数据结构
数据结构篇 单链表 #include<iostream> using namespace std; const int N=100010; int idx,head,n[N],ne[N]; int a; void add_head(int x){ n[idx]=x; ne[idx]=head; head=idx++; } void add(int k,int x){ n[idx]=x; ne[idx]=ne[k]; ne[k]=idx++; } v原创 2021-05-18 21:22:23 · 162 阅读 · 2 评论 -
第一篇——基础算法
基础算法篇 快速排序 分治算法都有三步 1.分成子问题 2.递归处理子问题 3.子问题合并 分析:基于分治 1.确定分界点 2.调整区间 左边都小于x,右边都大于x 3.递归处理左右两段 void quick_sort(int q[],int l, int r){ //递归的终止情况 if(l >= r )return ; int i = l-1,j= r+1,x = q[l + r>>1]; while(i < j){ do i++; while(q[i] &l原创 2021-05-07 22:44:13 · 71 阅读 · 0 评论