算法题目刷题
# 算法题目刷题
943802606
这个作者很懒,什么都没留下…
展开
-
算法题目——最短路径问题(HDU—1007)
题目链接:HDU-1007前序: 先看一维中的最短路径的计算方式问题的简单描述:(题意)在一个笛卡尔系中,n个点分布不一,在这N个点中,求出相距最短的两个点之间的距离思路:分治二分法解题报告:就是要把N个点x坐标和Y坐标进行排序,然后进行比较!代码过程:使用递归分治法解决问题递归的退出条件:仅当剩余两个顶点时,直接计算出距离。仅剩三个点时,求出任意两点之间的距离,进行比较进行分治递归:二分法,先将结构体数组分成两份(根据中间点来分)然后递归求d=min(左边s1,右边s2)点对分别原创 2021-09-30 14:42:49 · 477 阅读 · 0 评论 -
算法题目——二次函数三分求极值(HDU-3714)
题目链接:HDU-3714题目描述:对于N个二次函数,求每个二次函数的最小值中的最大值思路:使用三分法求极值(递归调用)对于这种在指定区间里只有一个极值点的函数(凸函数凹函数都可以),我们可以使用三分法求极值三分极值法的思想:对于区间[l,r],令m=(l+r)/2即中点,再令mm=(m+r)/2,即右半段的中点。这样l,m,mm,r四个点就把区间分成了三份。此时若m更靠近极值点,则令r=mm。否则令l=m;这样就把区间缩小了。对于用float类型表示的连续函数,可以设定一个迭代次数size原创 2021-09-30 14:53:46 · 300 阅读 · 0 评论 -
算法题目——子序列和问题(poj-3061)(尺取法)
题目链接:POJ-3061题意:给定一个序列,使得其和大于或等于S,求最短的子序列长度。问题分析:1.首先序列都是正整数,当子序列和大于等于S时,已经没有必要再将右端点继续向右移动。因为再向右移动,序列的长度一定会大于此时的长度2.所以,当子序列和小于S时,右端点向右移动;当子序列和大于等于S时,左端点向右移动。3.如果右端点一直移动到最右端时,此时的序列和仍小于S,就结束枚举这个题目区间和明显是有趋势的:单调变化,所以根据题目要求很容易求解,但是在使用之间需要对区间前缀和进行预处理计算。问原创 2021-10-14 19:32:36 · 254 阅读 · 0 评论 -
算法题目——最长连续序列
题目链接:leetcode.128思路:1.现将数据存放到数组中去2.再将数据存到一个集合set中去(方便去重,查找某一个元素是否存在于数组中)3.循环该数组,若该元素的前一个元素不在数组中(通过集合来查找),说明它将会是一个连续序列的开始元素,在对该元素循环查看它的下一个元素是否存在该数组(还是使用set来查看)4.max(当前的最大长度,和之前的最长长度)#include<iostream>#include<algorithm>#include<vector原创 2021-10-12 14:48:26 · 89 阅读 · 0 评论 -
算法题目——整数划分(HRBUST-2004)
题目链接:HRBUST-2004递归法:1.当n=1时,此时只有1种解{1};2.当m=1时,此时也只有1种解{1,1,1, …3.当n> m时,要分为最大数包含m和不包含m两种情况。●包含m:此时就是{mx1,2…}. 其中x1+x2+3.+… =n-m, 就相当于求和为n-m,最大值为m的划分个数: f(n-m,m)●不包含m:此时最大数最大为m-1,相当于把n划分为最大数为m-1的划分个数: f(n,m-1)因此:当n>m时划分个数为f (n-m,m) +f (n,m-1)原创 2021-09-30 15:08:01 · 127 阅读 · 0 评论 -
算法——常用的数据结构/模板/基础知识
常用的数据结构/模板/基础知识c++——优先队列(priority_queue)c++中的全排列函数next_permutation()c++——优先队列(priority_queue)参考文章:c++——优先队列(priority_queue)c++中的全排列函数next_permutation()c++中的全排列函数next_permutation()...原创 2021-10-02 16:48:53 · 93 阅读 · 0 评论 -
算法题目——电梯(HDU-1008)
题目链接:HDU-1008#include<iostream>#include<vector>using namespace std;int main(){ vector<int> vec;//用于存储每次的楼层数 vector<int> vec2;//存储结果,方便输出结果 int n; int time;//记录总的时间消耗 while(cin>>n&&n!=0) { int temp;原创 2021-09-09 19:04:41 · 216 阅读 · 0 评论 -
算法题目——爬楼梯(动态规划)
题目链接:70.爬楼梯本题大家如果没有接触过的话,会感觉比较难,多举几个例子,就可以发现其规律。爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。那么第一层楼梯再跨两步就到第三层 ,第二层楼梯再跨一步就到第三层。所以到第三层楼梯的状态可以由第二层楼梯 和 到第一层楼梯状态推导出来,那么就可以想到动态规划了。我们来分析一下,动规五部曲:定义一个一维数组来记录不同楼层的状态确定dp数组以及下标的含义dp[i]: 爬到第i层楼梯,有dp[i]种方法确定递推公式如果可以推出dp[i]呢?从d原创 2021-10-07 22:44:50 · 138 阅读 · 0 评论 -
算法题目中经典问题(易错点)
1. 二维数组的传参问题2. 多组测试控制台数据,输入到文件结束实例:原创 2021-09-30 14:59:12 · 332 阅读 · 0 评论 -
算法题目——使用最小花费爬楼梯(动态规划)
题目链接:746.使用最小花费爬楼梯方法:动态规划假设数组cost的长度为n,则n个阶梯分别对应下标0到n- 1,楼层顶部对应下标n,问题等价于计算达到下标n的最小花费。可以通过动态规划求解。创建长度为n + 1的数组dp,中dp[i] 表示达到下标i的最小花费。于可以选择下标0或1作为初始阶梯,因此有dp[0] = dp[1]= 0。当2≤i≤n时,可以从下标i-1使用cost[i- 1]的花费达到下标i,或者从下标i-2使用costli - 2]的花费达到下标i。为了使总花费最小,dp[i]原创 2021-10-07 23:20:48 · 198 阅读 · 0 评论 -
算法题目——第K大的数
题目链接:剑指offer.76思路:使用 priority_queue 构建优先队列,这里注意要构建大顶堆,使less;pop() 弹出前 K-1 个数值top() 即可#include<iostream>#include<vector>#include<algorithm>#include<queue>using namespace std;/* 使用 priority_queue 构建优先队列,这里注意要构建大顶堆,使用 les原创 2021-10-12 13:55:18 · 69 阅读 · 0 评论 -
算法题目——田忌赛马(POJ-2287)
POJ-2287#include<iostream>#include<vector>#include<algorithm>#include<cstring> using namespace std;bool comp(int x ,int y){ return x > y;}int main(){ int n; int temp;//保存临时变量的 vector<int> vec;//用于保存输出的结果原创 2021-09-09 20:23:13 · 536 阅读 · 0 评论 -
算法题目——岛屿数量(bfs dfs)
题目链接:leetcode.200岛屿数量== 重点:路过过的点做新标记 ,以防止重复路过 ==#include<iostream>#include<algorithm>#include<vector>using namespace std;char str[1000][1000];const int dx[4]={0,0,-1,1};const int dy[4]={1,-1,0,0};void bfs(int x,int y,int m,int原创 2021-10-12 17:41:34 · 229 阅读 · 0 评论 -
算法题目——多米诺骨牌问题(POJ-2663)
题目链接:设有形状一样的多米诺牌,每张牌恰好覆盖棋盘上相邻的两个方格,即一张多米诺牌是一张 1 行 2 列或者 2 行 1 列的牌。那么,是否能够把 32 张多米诺牌摆放到棋盘上,使得任何两张多米诺牌均不重叠,每张多米诺牌覆盖两个方格,并且棋盘上所有的方格都被覆盖住?我们把这样一种排列称为棋盘被多米诺牌完美覆盖。这是一个简单的排列问题,同学们能够很快构造出许多不同的完美覆盖。但是,计算不同的完美覆盖的总数就不是一件容易的事情了。不过,同学们 发挥自己的聪明才智,还是有可能做到的。输入一次输入可能包含原创 2021-10-01 21:52:49 · 1481 阅读 · 0 评论 -
算法题目——生成括号匹配
题目链接:剑指offer2.76#include<iostream>#include<algorithm>#include<vector>using namespace std;void solve(int left,int right,vector<string> &vec,string &str){//当左右括号都使用完的时候,即是一种答案解 if(left == 0 && right == 0) {原创 2021-10-12 13:45:34 · 116 阅读 · 0 评论 -
算法题目——读书知识点统计问题(POJ-3320)(尺取法)
题目链接:poj-3320问题:杰西卡是一个非常可爱的女孩,受到许多男孩的追捧。最近她有个问题。期末考试快到了,但她几乎没花什么时间。如果她想通过考试,她必须掌握一本厚厚的教科书中包含的所有思想。那本教科书的作者和其他作者一样,对这些观点极为挑剔,因此有些观点被多次提及。杰西卡认为,如果她能把每个想法至少读一次,她就能通过考试。她决定只读这本书的一个连续部分,其中包含了整本书涵盖的所有思想。当然,子手册应该尽可能薄。一个非常勤劳的男孩为她手工索引了杰西卡教科书的每一页,每一页都有什么想法,因此他的求爱原创 2021-10-14 20:07:21 · 236 阅读 · 0 评论 -
算法题目——被围绕的区域(dfs,bfs)
leetcode.130被围绕的区域bfs解法:深度优先遍历:思路:读取数据后1.先将数据的四周进行bfs算法(因为只有与外围接触的点,才能不被包围)算法执行中时,递归看看该点的上下左右有没有是O的,如果是O则标记为A2.循环完四周之后,将数据中的O全部换成X,将全部的A换成O即得到最终的结果#include<iostream>#include<algorithm>#include<vector>using namespace std;//定义为全原创 2021-10-12 15:51:21 · 156 阅读 · 0 评论 -
算法题目——杨辉三角问题
思路:#include<iostream>#include<cstdio>#include<cstring>#include<map>#include<cmath>#include<algorithm>using namespace std;void solve(){ }int main(){ int n; cin>>n; int matrix[n+1][n+1]; memset(mat原创 2021-10-12 21:24:53 · 85 阅读 · 0 评论 -
算法题目——岛屿问题(POJ-1328)
POJ-1328题目大意:在x轴上建立尽量少的雷达覆盖所有的岛屿。Input:岛屿的数量n,雷达覆盖半径d.接下来的n行一行表示一个岛屿(x,y).Output:每个案例的雷达最少数目.经典的区间选点!要搞清楚为什么排序,然后要明白如何选点。思想(排序原因):小区间被满足,大区间一定被满足。(所以排序后所有岛屿都是 递增的!)(即小区间都在前面。)选点:只有前一个点的右端点小于下一个点的左端点,这时才选一个点(即增加一个雷达)因为不可能存在一个雷达可以覆盖到这两个岛屿,而且此时前面用一个雷达原创 2021-09-25 21:16:26 · 315 阅读 · 0 评论 -
算法题目——Problem A 二进制(北邮机试)
Problem A 二进制题目描述32位二进制数 X ,对其进行X+1,X+3操作,并输出。注意不能忽略前导0。输入第一行,一个整数 T ,代表测试数据组数。接着 T 行,输入32为二进制数输出对每组测试数据。输出两行,第一行为X+1,第二行为X+3.测试样例输入20000000000000000000000000000000000000000000000000000000000000001输出0000000000000000000000000000000100000000000原创 2021-10-01 23:38:54 · 110 阅读 · 0 评论 -
算法题目——质量(POJ-1862)
题目链接:POJ-1862再说一遍:STL大法好,贪心算法优先队列(大根堆)#include<iostream>#include<queue>#include<math.h>using namespace std;int main(){ priority_queue<float> pqueue; int n; cin>>n; float temp; for(int i=0;i<n;i++) { cin&原创 2021-09-09 19:29:52 · 97 阅读 · 0 评论 -
算法题目——省份数量(dfs,bfs)
题目链接:leetcode.547省份数量dfs:深度优先遍历:递归思路:读入数据完成后重点:建立一个数组记录该省份是否访问,新建一个元素记录省份圈的个数1.对所有省份循环一次,如果该省份未被访问,则进入dfs2.dfs中,对所有省份循环一遍,如果未被访问且省份index可以到达省份j时将该省设置为已访问,且进入j省的dfs中#include<iostream>#include<algorithm>using namespace std;int matrix[原创 2021-10-12 20:12:49 · 182 阅读 · 0 评论 -
算法题目——求众数
在c++中有两个关联容器,第一种是map,内部是按照key排序的,从小到大 第二种是unordered_map,容器内部是无序的,使用hash组织内容的。 #include<iostream>#include<map>#include<algorithm>using namespace std;int main(){ map<int,int> mp; int n; cin>>n; int temp; while(n.原创 2021-10-02 00:14:06 · 101 阅读 · 0 评论