算法
王也枉不了
这个作者很懒,什么都没留下…
展开
-
最长公共子序列(LCS)
**动态规划都是从最小状态到最大状态的过程,我们可以先匹配两个字符串的一个字符,再到两个字符,三个字符。。。我们可以使用二维数组去装 字符串a的下标0到下标i 和 字符串a的下标0到下标j 之间的公共子序列的最大值值得注意的是下标i与下标j指0到该下标而不是单单此下标例如abbbbbbb 与 acccccc当i = 0,b = 6;则是a 与 acccccc匹配,结果为一,那么当i=1时,ab与acccccc匹配则取决于 a与acccccc和 ac与accccc 画个二维表就理解了而自小而大原创 2021-11-26 09:39:52 · 361 阅读 · 2 评论 -
传教士与野人过河问题
分析过河时,河的一岸减少,另一岸相应增加只有五种过河情况,我们按照限制条件和目的情况已经分情况递归即可DFS时,我们要弄清有哪些限制条件 , 我们的目的 ,以及过程的情况来编写递归:限制条件:无论在哪一岸,必须满足野人数小于等于传教士人数才能避免吃人情况人数不论哪一人种哪一岸都不能超过初始人数,不能小于0目的:河对岸的野人数等于初始野人人数河对岸的传教士人数等于初始传教士人数过程情况:只有五种过河情况:1.一个野人过河2.一个传教士过河3.一个传教士一个野人过河4.两个传教士原创 2021-11-18 23:20:00 · 2692 阅读 · 0 评论 -
Dijkstra 单源最短路径的实现
最主要的地方就是使用一个数组记录当前到达各点各权值,并不断在访问新点时利用这个已记录的值不断更新已经访问过的点要立Flag 处理掉int n, int m, int **Map, bool Path[], int Pre[], int start分别是:点数量,边数量,边权,访问状态,前点,起始点注释很详细,本文章主要是实现,如果不理解建议看b站的视频理解一下以下是代码,注意看注释#include <bits/stdc++.h>using namespace std;void原创 2021-11-14 18:19:17 · 644 阅读 · 1 评论 -
POJ1001 求高精度幂 (分治高精度大数相乘)
总体思路:高精度大数乘法需要记录小数点位置 需要使用大数相乘只是考验能否使用大数相乘有几个特判也需要注意,其他没什么POJ使用to_string 过不了也不知道为啥必须手写 POJ使用stoi过不了也不知道为啥必须手写 POJ不能使用万能头文件 注意去除前后的0 另外java有大数类,可以直接得到结果原创 2021-11-13 21:41:50 · 463 阅读 · 2 评论 -
红与黑(POJ1979)DFS+记忆化搜索详细题解
DFS+记忆化搜索详细题解原创 2021-10-21 20:56:56 · 310 阅读 · 1 评论 -
快速排序图解(递归,栈两种实现)
牢记我们的目的是把基准数左边变成都比基准数小,右边变成都比基准数大非常详细的图解与注释,递归与栈两种方法实现原创 2021-10-12 08:00:00 · 1387 阅读 · 6 评论 -
整数转换英文表示
解题思路我们知道,每三位会出现一个千级以上单位,每三个间有个,百,十单位,则可以按照num%1000 ,每三位数模拟,三位数后若num>0,则可以使用栈保存新进制(千,百万…)而此单位用一个长度len保存即可代码class Solution{public: string numberToWords(int num) {if(num==0)return "Zero"; int len = 2,p1,p2,p3,p4,p5,p6,p7,p8; stack<str原创 2021-10-11 20:58:17 · 72 阅读 · 1 评论 -
L1-033出生年
#include <bits/stdc++.h>using namespace std;int main(){ int years,nums; cin>>years>>nums; int n[4]; int count =0,i=0; for(i=years;;i++) { count =1; n[0]=i/1000; n[1]=i/100-n[0]*10; n[2]=i/10-n[0]*原创 2021-07-07 18:51:49 · 71 阅读 · 0 评论 -
L1-027 出租 (20 分)
1. 题目题目链接2.思考map+set3.代码#include <bits/stdc++.h>#include<bits/stdc++.h>using namespace std;int main(){ set<int,greater<int>> st; string nums; int *arr=new int [1000],n=0; cin>>nums; for(int i:nums) st.insert(i原创 2021-07-01 20:14:30 · 74 阅读 · 1 评论 -
1769. 移动所有球到每个盒子所需的最小操作数
1769. 移动所有球到每个盒子所需的最小操作数1.题目2.思路3.代码1.题目移动所有球到每个盒子所需的最小操作数有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存原创 2021-06-23 09:41:49 · 89 阅读 · 1 评论