
动态规划
xiu_cs
所有博客仅作为个人笔记用,内容写的乱七八糟,不要参考
Do what you want to do.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PTA A1040 Longest Symmetric String
#include<iostream>#include<cstdio>#include<algorithm>#include<string.h>using namespace std;int dp[1010][1010];int main(){ //freopen("in.txt","r",stdin); string s; getline(cin,s); memset(dp,0,sizeof(dp)); int ans = 1; int原创 2020-06-20 11:51:49 · 155 阅读 · 0 评论 -
A 1045 Favorite Color Stripe
方法1:哈希转换为LIS问题#include<iostream>#include<algorithm>#include<string.h>using namespace std;int Hash[210];int A[10010];int dp[10010];int main(){// freopen("in.txt","r",stdin); int N,M; memset(Hash,-1,sizeof(Hash)); cin>>N&g原创 2020-06-20 11:03:09 · 151 阅读 · 0 评论 -
A1007 Maximum Subsequence Sum 动态规划
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;long long int dp[10010];int v[10010];int s[10010];int main(){ int n; //freopen("in.txt","r",stdin); scanf("%d",&n); dp[0] = 0; int end =1; long long原创 2020-06-06 12:08:33 · 161 阅读 · 0 评论 -
删除最少的元素 LIS
LIS:由贪心的思想,用dp[len]保存长度为len的子序列中结尾最小的那个值。比如第i个位置的数为x,它与那些1~i-1中的结尾小于x的子序列构成新的子序列。遍历dp,找到第一个大于x的位置pos(知x>dp[pos−1],x<dp[pos]x>dp[pos-1],x<dp[pos]x>dp[pos−1],x<dp[pos]),更新其值为x,即对应长度的子序列结尾值被更新(变得更小)。LIS的各种变体对应解决策略 O(n2)O(n^2)O(n2):最长上.原创 2020-05-22 23:19:32 · 328 阅读 · 0 评论 -
Leetcode 764. 最大加号标志
class Solution {public: int orderOfLargestPlusSign(int N, vector<vector<int>>& mines) { int Map[N][N]; for(int i=0;i<N;i++){ for(int j= 0;j<N;j++){ Map[i][j] = 1; }原创 2020-05-18 11:12:57 · 463 阅读 · 0 评论 -
蒜头跳木桩——LIS
#include<bits/stdc++.h> using namespace std;int a[1010];int dp[1010];//求最长下降子序列 int main(){ int n; cin>>n; memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++...原创 2020-04-08 17:48:29 · 211 阅读 · 0 评论 -
多重背包问题(二进制拆分)
多重背包问题描述: 有NNN种物品,第iii种物品的体积是cic_ici,价值是wiw_iwi,每种物品的数量都是有限的,为nin_ini。现有容量为VVV的背包,求在总体积不超过VVV的条件下,使得背包的总价值最大。朴素算法: 将第iii类物品的nin_ini个物品拆分,得Σni\Sigma{n_i}Σni个物品,即将原问题转换为了01背包问题,时间复杂度为O(V×Σn)O(...原创 2020-03-16 01:26:35 · 1565 阅读 · 0 评论 -
蒜头君的购物袋3——完全背包
要点: 保证用较小容量的最大价值去更新较大容量的最大价值,不重不漏。//V 最大容量//w[i] 第i件物品的重量//v[i] 第i件物品的价值for(int i=1;;i++){ for(int j=w[i];j<=V;j++){ dp[j]=max(dp[j-w[i]]+v[i],dp[j]); }}时间复杂度: O(N∗V)O(N*V)O(N∗V)空间复杂度...原创 2020-03-15 22:36:55 · 156 阅读 · 0 评论 -
蒜头君的购物袋2——01背包(经典)
法一 二维数组:时间复杂度: O(N∗V)O(N*V)O(N∗V)空间复杂度: O(N∗V)O(N*V)O(N∗V)#include<bits/stdc++.h> using namespace std;int v[101];int p[101];int dp[101][1010];int main(){ int V,n; cin>>V>>...原创 2020-03-15 21:46:53 · 204 阅读 · 0 评论 -
蒜头君的购物袋1——01背包
#include<bits/stdc++.h> using namespace std;int v[31];int dp[20001];int main(){ int V,n; cin>>V>>n; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ cin>>v[i]; } ...原创 2020-03-15 21:26:56 · 151 阅读 · 0 评论 -
蒜头君的新游戏-递推
思路:关键在于找到递推规律. 如果第m次传递后娃娃在同事A手上,那么在第m-1次传递后,娃娃应该在A的左右邻居手上,第m-2次传递后,娃娃应该在A的左右邻居的邻居的手上… 如果第一次传递时,娃娃在A手上,那传递后,娃娃在A的左右邻居手上,第二次传递后,娃娃在A的左右邻居的邻居的手上…#include<bits/stdc++.h>using namespace std;in...原创 2020-03-13 11:25:51 · 281 阅读 · 0 评论