DP
巴巴多斯小魔
这个作者很懒,什么都没留下…
展开
-
leetcode 10. 正则表达式匹配 44. 通配符匹配 (区间dp)
题目class Solution {public: bool isMatch(string s, string p) { int n=s.size(),m=p.size(); bool **dp=new bool*[n+1]; for(int i=0;i<=n;++i){ dp[i]=new bool[m+1]; for(int j=0;j<=m;++j) dp[i][j]=false;原创 2020-12-14 21:45:36 · 117 阅读 · 1 评论 -
leetcode 5619. 最小不兼容性(将大小不超过16的数组分成k组 每组无重复元素 求所有组的最大-最小 的和最小 状压dp)
题目时间复杂度:(2^n) * (n^2)空间复杂度:(2^n) * nclass Solution {#define INF 0x3f3f3f3f#define low(i) ((i)&(-i))public: //当要选每个组的不是一个时: //dp[s|x][x]=min(dp[s][y]+nums[x]-nums[y]); //当要选每个组的第一个时: //dp[s|x][...]=min(dp[s][...]); int get(int原创 2020-12-06 19:20:14 · 344 阅读 · 0 评论 -
leetcode 1155. 掷骰子的N种方法(分组背包dp 模板 每组必须选且只选一个)
题目class Solution {#define mod 1000000007public: int numRollsToTarget(int d, int f, int target) { int *dp=new int[max(f,target)+1]; for(int i=0;i<=max(target,f);++i) dp[i]=0; for(int i=1;i<=f;++i) dp[i]=1;//一个骰子的时候原创 2020-12-05 19:00:53 · 587 阅读 · 0 评论 -
leetcode 410. 分割数组的最大值(二分巨水,但是还可以dp 利用单调性)
题目dp[i][m]=sigma min(max(dp[j][m-1],sum[i]-sum[j])) 其中0<=j<i。但是我们对于i,并不需要把[0,i)的所有j遍历一遍。而是直接找出 最大的 j 满足 dp[j][m-1]<=sum[i]-sum[j]. 假设这个j最后求出来pos;我们为什么直接找到pos就行了呢?pos对应的m个分组和的最大值是sum[i]-sum[pos]。假如j<pos,那么dp[j][m-1]会更小,sum[i]-sum[j]会更大,m个原创 2020-12-05 11:44:07 · 73 阅读 · 0 评论 -
leetcode 一些区间dp
题目class Solution {#define INF 0x3f3f3f3fpublic: int dp[505][505]; int minInsertions(string s) { memset(dp,INF,sizeof dp); int n=s.size(); for(int i=0;i<n;++i) dp[i][i]=0; for(int len=2;len<=n;++len){//枚举长度原创 2020-12-01 00:01:50 · 130 阅读 · 0 评论 -
leetcode 1235. 规划兼职工作(就是活动安排,每个活动有个报酬,问你得到最大报酬,dp)
题目把活动按结束时间从小到大排序,对于每个活动求出前面最后一个结束时间<=该活动开始时间的活动,把活动的结束时间插入到线段树,求前面最后一个<=,就是求前面第一个> 然后-1.dp[i]=max(dp[i-1],profit[i]+dp[pre[i]]); dp[i]:代表前i个活动安排获得的最大报酬。class Solution {public: struct Segment{ int mx[50000<<2]={0};原创 2020-11-20 10:27:14 · 311 阅读 · 0 评论 -
leetcode 845. 数组中的最长山脉(无脑dp)
题目也可以尺取,但是我不想(其实是我很容易写成一锅粥。)class Solution { public int max(int a,int b){return a>b?a:b;} public int longestMountain(int[] A) { int n=A.length; if(n<3) return 0; int[] left=new int[n]; int[] right=new int[n]原创 2020-11-13 14:18:50 · 100 阅读 · 1 评论 -
leetcode 数位dp
绝了,又发现我之前数位dp板子是错的。。写了那么久才发现,之前样例太水了。文章目录233.数字1的个数600. 不含连续1的非负整数357. 计算各个位数不同的数字个数(处理前导0)902. 最大为 N 的数字组合(处理前导0)233.数字1的个数题目class Solution {public: struct node{ int cnt,sum; node(){sum=-1;} node(int cnt,int sum){this->原创 2020-11-12 14:33:20 · 307 阅读 · 0 评论 -
leetcode买卖股票的几个题(dp)
文章目录剑指 Offer 63. 股票的最大利润(巨水题)122. 买卖股票的最佳时机 II(可以买卖多次 dp/~)714. 买卖股票的最佳时机含手续费(dp)188. 买卖股票的最佳时机 IV(三维dp 滚动数组后成二维)309. 最佳买卖股票时机含冷冻期(二维dp)剑指 Offer 63. 股票的最大利润(巨水题)题目对于每一天找到它前面的最小值class Solution {public: //对于每一天找到它前面的最小值 int maxProfit(vector<原创 2020-11-12 14:32:27 · 105 阅读 · 0 评论