洛谷刷题
文章平均质量分 62
能力提升综合题单Part1 入门阶段
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
落谷----P4994 终于结束的起点
终于结束的起点题解集合递推递推思路:首先无论取什么模数 M,最终模 M 下的斐波拉契数列都会是 0, 1, …, 0, 1, …我们需要求出: 请你求出最小的 n > 0,使得 fid(n) mod M=0,fib(n+1) mod M=1;例如:其实本题本质还是不断递推求出fib数列每一项的值,求的同时对M进行取模,然后判断当前取模得出的结果是否为0,并且同时下一位对M取模得出的结果应该为1我们设3个变量f[0] f[1] tempf[0]记录当前斐波那契数列的值f[1..原创 2021-06-02 18:03:00 · 292 阅读 · 0 评论 -
洛谷-----P1025 [NOIP2001 提高组] 数的划分
数的划分题解集合回溯法思想自下而上的DFS动态规划---完全背包思想回溯法思想思路:首先这里不考虑顺序,因此是组合问题这里要求把整数n分成k份,求共有几种分法?其实就是给你一个可选数组,数组里面元素按降序大小从1----n排列,要求你从里面选择k个数字,每一个数字可以重复选择,要求这k个数字的和等于n,问存在几种方式?其实就是下面这道题的翻版问法:leetcode 39. 组合总和—回溯篇2还是把问题给树形化,变成对一个多叉树的遍历问题下面看图:显然可以看出递归的结束条件:当前已..原创 2021-06-01 16:31:24 · 1346 阅读 · 28 评论 -
洛谷-----P1192 台阶问题
台阶问题题解集合记忆化DFS动态规划记忆化DFS思路:画出树形图,其实就是多k叉树的遍历,因为下面图中所举的例子中k=2,因此是对二叉树的遍历累加求和重复计算问题:这里圈出来的并不是所有的重复计算,只是一部分,可见对于小数据来说,就有大量重复计算,那么对于海量数据而言,重复计算的数据量可想而知这里采用记忆化递归,即用一个哈希表保存已经计算出来的结果,避免重复计算代码:#include<iostream>using namespace std;#include<u.原创 2021-06-01 12:40:34 · 509 阅读 · 1 评论 -
洛谷-----P5534 【XR-3】等差数列
等差数列题解集合公式法dfs公式法套用数学上面的等差数列求和公式:Sn=a1*n+n(n-1)*d/2末项公式:Sn = a1 + (n - 1) * d;代码:#include<iostream>using namespace std;class Solution {public: long solution(long a1,long a2,long n) { long d = a2 - a1; return a1 * n + n * (n - 1) * d ..原创 2021-05-31 22:00:19 · 392 阅读 · 1 评论 -
洛谷-----P1464 Function
Function题解集合记忆化搜索记忆化搜索还是把本题转化为对一棵多叉树的遍历,但是题目中也暗示我们会存在很多重复计算,那么现在关键就在于找到这些重复计算,并且想办法免去这些重复计算,下面看图:这里假设a=b=c=3上图中相同形状用green圈出来的部分代表着是重复计算过程,可以通过哈希容器记录保存,避免重复计算代码:#include<iostream>using namespace std;#include<vector>#include<algor..原创 2021-05-30 22:07:24 · 276 阅读 · 0 评论 -
洛谷------P1036 [NOIP2002 普及组] 选数
选数集体集合回溯思想解题回溯思想解题思路:这里是任选三个数相加,求所有和中的素数个数。这里可以把问题转化一下,变为:求解出从n个数中任意选k个数构成的所有组合(组合不看元素之间的顺序,与排列区分开来),而我们这里只需要在找到一种组合时,计算当前组合的和,看是否等于素数,额外用一个变量sum,记录和为素数的个数,如果当前和为素数,那么sum++;建议大家可以先看一下用回溯法求解组合问题,再回头来看此题,会发现其实很简单:leetcode 39. 组合总和—回溯篇2leetcode 40. ..原创 2021-05-30 20:36:48 · 366 阅读 · 0 评论 -
洛谷-----P1028 [NOIP2001 普及组] 数的计算
数的计算题解集合DFS记忆化递归动态规划---递推思想DFS把问题转化为对一颗多叉树的遍历,叶子的总数加上一个根节点的总数就是我们需要的结果代码:#include<iostream>using namespace std;class Solution {public: int SumNum(int num) { int sum =0; //递归结束条件: if (num<= 1) return 1; for (int i = 0; i <..原创 2021-05-30 18:31:38 · 818 阅读 · 0 评论