随笔分类 - 算法
摘要:思路 这里的 i 才是主要的遍历指针, j 是用来剔除元素以满足题目要求的。 代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int n, res; int a[N], s[N]; int main() { cin
阅读全文
摘要:1. 题目 简单概述:走迷宫问题,行走的方向是上下左右。这个迷宫内有些格子不能走,想要从迷宫的左上角走到右下角,最少移动次数。这道题属于最短路问题(求出到达一个点的最短路径)。 思路分析 为什么使用BFS求到的答案能保证是最短的路径? 因为BFS是逐层搜索的,能把当前层的所有可能值包括进来,每一层的
阅读全文
摘要:题目链接 912. 排序数组 1. 快速排序 思路 快速排序的思想是分治 解题思路 确定分界点x,这里直接考虑 l + r >> 1 调整范围,让左半段的数小于等于x,右半段的数大于等于x 递归处理左右两段 这里分界点 x 只考虑 l + r >> 1,递归的边界是 j 和 j + 1。 和归并不同
阅读全文
摘要:整数二分模板(直接用) 思路 代码 int lower_bound(int target) { int l = -1, r = n; while (l + 1 < r) { int mid = l + r >> 1; if (q[mid] < target) { l = mid; } else {
阅读全文
摘要:动态规划中的经典算法题,和01背包不同的是,完全背包的物品想选几个选几个... 题目链接 Acwing 完全背包问题 题目思路 完全背包和01背包的区别在于:完全背包中的物品是可以随意数量的。对于一个物品,可以选0个,1个,...,直到选到装不下为止。 这里面存在一个转化: 只从结果来看,完全背包的
阅读全文
摘要:动态规划算法经典入门题,如何装东西,使得背包总价值最大? 题目链接 Acwing 01背包问题 解题思路 处理输入 输入 n, m,v[i], w[i] 等信息 算法核心 动态规划的思想是通过计算当前的值,这个值能被后来使用,最后得到解 属性:求最大价值 状态表示:只考虑前 i 件物品时,体积为 j
阅读全文