算法复习
peanutboom
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动态规划:区间dp(合并石子)
题目链接:282. 石子合并 - AcWing题库 #include <iostream> using namespace std; const int maxn = 10000; const int INF = 0x3f3f3f3f; int s[maxn],f[maxn][maxn]; // dp[i][j] i~j merge cost min dp[i][j] = min(dp[i][k]~dp[i][j]) // k>=i&&k<j int main()原创 2021-12-21 19:46:41 · 250 阅读 · 0 评论 -
二分:数的范围
题目链接:789. 数的范围 - AcWing题库 二分建议就用y总的模板 #include <cstdio> #include <cstring> int S[100100]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i = 0;i < n;i++) scanf("%d",&S[i]); for(int i = 0;i < m;i++) {原创 2021-12-20 16:34:56 · 158 阅读 · 0 评论 -
算法复习:图(邻接矩阵和邻接表)
邻接矩阵 #include <iostream> using namespace std; const int N = 520,INF=0x3f3f3f3f; int n,m; int g[N][N]; void init() { for(int i = 1;i <=n;i++) for(int j = 1;j <= n;j++) if(i == j) g[i][j] = 0; else g[i][j] = INF; } // 5 5 // 1 2 3 // 2原创 2021-12-19 10:35:34 · 328 阅读 · 0 评论 -
数据结构:单调栈
题目链接:活动 - AcWing #include <cstdio> #include <cstring> int stk[100010],tt; int main() { int n; scanf("%d",&n); for(int i = 0;i < n;i++) { int x; scanf("%d",&x); while(tt && stk[tt] >= x) tt--; if(tt) printf("%原创 2021-12-19 09:32:41 · 633 阅读 · 0 评论 -
BFS:走迷宫
题目链接:活动 - AcWing #include <cstdio> #include <queue> #include <cstring> using namespace std; const int maxn = 100+5; int map[maxn][maxn],dp[maxn][maxn]; typedef pair<int,int> Pint; int main() { int n,m; int dx[] = {0,0,-1,1},dy[]原创 2021-12-18 18:35:20 · 116 阅读 · 0 评论 -
回溯:排列数字
题目链接:活动 - AcWing #include <cstdio> #include <vector> using namespace std; vector<int>path; void backtracking(int n,vector<bool>&used) { if(path.size() == n) { for(int i = 0;i < n;i++) if(i != n-1) printf("%d ",path[原创 2021-12-18 15:08:30 · 118 阅读 · 0 评论 -
动态规划(线性dp):最长上升子序列
题目链接:895. 最长上升子序列 - AcWing题库 f[n]表示从w[0]开始,以w[n]为结尾的数的最大子序列 转移方程:f[i] = max(f[i],f[j]+1) 0=<j<i #include <cstdio> #include <algorithm> const int maxn = 1e3+10; int w[maxn],f[maxn]; int main() { int n; scanf("%d",&n); for(i...原创 2021-12-18 10:49:14 · 156 阅读 · 0 评论 -
动态规划线性dp:数字三角形
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输入格式 第一行包含整数 n,表示数字三角形的层数。 接下来 n行,每行包含若干整数,其中第 i 行表示数字三角形第 i层包含的整数。 输出格式 输出一个整数,表示最大的路径数字和。 数据范原创 2021-12-17 10:24:00 · 251 阅读 · 0 评论 -
动态规划(区间dp)
石子合并 设有 N 堆石子排成一排,其编号为 1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。 例如有 4堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24; 如果转载 2021-12-17 13:56:32 · 106 阅读 · 0 评论
分享