- 博客(15)
- 收藏
- 关注
原创 RMQ—ST
原题链接在RMQ问题中,著名的ST算法就是倍增的产物。给定一个长度为N的序列A,ST算法能够在O(NlogN)的时间的预处理后,以O(1)的时间复杂度在线回答"数列A的下标在l~r之间的最大值是多少"#include <iostream>#include <algorithm>#include <cmath>using namespace std;...
2021-03-21 17:22:34 86
原创 剑指week4
1.二叉搜索树的后序遍历序列 class Solution {public: vector<int>seq; bool verifySequenceOfBST(vector<int> sequence) { seq=sequence; return dfs(0,seq.size()-1); } bool d...
2021-03-20 20:49:18 107
原创 剑指week3
1.反转链表迭代版本:class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pre=NULL,*cur=head; while(cur) { auto next=cur->next; cur...
2021-03-19 23:02:18 64
原创 剑指 week2
1.机器人的运动范围是数位和,裸BFS,用pair<int,int>存下标class Solution {public: int book[55][55]; int get_sum(pair<int,int>p) { int s=0,num1=p.first,num2=p.second; while(n...
2021-03-19 10:55:07 112
原创 背包问题求具体方案
原题链接#include <iostream>#include <algorithm>using namespace std;const int N=1010;int v[N],w[N];int n,m;int dp[N][N];int main(){ cin>>n>>m; for(int i=1;...
2021-03-18 19:53:50 47
原创 背包问题求方案数
原题链接#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=1010;const int MOD=1e9+7;int dp[N],g[N];int n,v;int main(){ cin>...
2021-03-18 19:33:44 62
原创 状态机模型
1.大盗阿福原题链接方法一 闫氏dp分析法方法二 引入状态机模型动态规划 O(n)所谓的状态机,可以默认为搜索的方向数组,加到了动态规划上面.(个人理解)我们发现,这道题目一共就两种状态.不打劫打劫既然状态已经罗列好了,接下来就是状态之间的转移.①考虑,当前不打劫,能否转移到下一个不打劫.可以,因为这个商铺不打劫,那么下一个商铺当然也可...
2021-03-18 10:37:42 136
原创 正则表达式匹配
原题链接字符串匹配问题考虑LCS问题,对于i-1的状态,必须保证i>=1,且对于p[j]==' . ',都成立的匹配class Solution {public: bool isMatch(string s, string p) { int n=s.size(),m=p.size(); s=' '+s,p=' '+p; ...
2021-03-17 23:32:15 61
原创 剑指 week1
1.找出数组中重复的数字注意点:1.有一个出现在0~n-1之外的就要返回-12.空值返回-13.时间复杂度O(n),空间复杂度O(1)的解法class Solution {public: int duplicateInArray(vector<int>& nums) { int n=nums.size(); if(n==0)...
2021-03-16 19:43:37 90
原创 Bellman-Ford
BF算法的更新思想就是运用动态规划的思想,省去一维的i时刻注意点:1.选取n条边,也就是n条边的中转2.由于负权边的存在,因此最后若不存在的话,返回的不一定是INF,而是比它稍微小一点的很大的数3.备份数组保证更新上一次的值,而不会出现串联更新的情况4.bf算法可以用于判断是否存在负环#include <iostream>#include <algor...
2021-03-15 11:45:23 89
原创 有依赖的背包
原题链接关键:当递归处理u结点的子树返回时,进行分组背包的决策,各个子树中的结点可能非常多,可能有100多个结点,因此,如果以方案来划分最多有2^100种类别,所以要改用体积来划分从j表示当前除去v[u]的体积,j从[ m - v [u] , 0 ]的体积中枚举(类别),k选取体积是0,是1......是j(选一个)——>转化为分组背包问题转移方程为:dp[u][j]=max...
2021-03-14 22:05:26 78
原创 PAT 狼人杀
原题链接时隔一年拿到这道题,又是一脸懵逼。。。两个狼人都枚举过去一下就行,醉了呀先用a数组对全部人初始化好人,然后双指针枚举狼人,枚举完狼人后,再在该种情况下枚举自己说别人的话和别人的身份是否有矛盾,若有矛盾,说明自己在说谎,就加入lie中#include <iostream>#include <algorithm>#include <vector>...
2021-03-12 23:29:56 75
原创 20.并查集
合并集合#include <iostream>#include <algorithm>using namespace std;int n,m;const int N=1e5+10;int father[N];int find(int x)//查找x的祖先{ if(father[x]!=x) father[x]=find(father[...
2021-03-11 21:18:34 56
原创 LeetCode 动态规划L1
开二维数组dp[][] 且i与j下标都从1开始:vector<vector<int>>dp(len1+1,vector<int>(len2+1,0));53. 连续数组最大子序和dp[i]=max(dp[i-1]+nums[i],nums[i])Max=max(Max,dp[i])面试题 17.16. 按摩师状态转移考虑dp[i][0/1],对于第i...
2021-03-07 22:04:02 76
原创 单调队列优化多重背包
原题链接朴素多重背包问题:当外层循环到i时,dp[j]表示从前i种物品中选出若干个放入背包,体积之和为j时,价值之和最大值是多少for (int i = 1; i <= n; ++ i) { int v, w, s; cin >> v >> w >> s; for (int j = 0; j &...
2021-03-05 20:37:42 101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人