
动态规划dp
Layne...
遇事不决,可问春风
展开
-
最长上升子序列(及打印路径) —— 导弹拦截题解 (LIS / Dilworth定理 / dp / 贪心+二分)
题解 第一问很明显可以看出是类似LIS问题,只不过是变成求最长不上升子序列。 第二问根据Dilworth定理,我们将其反过来:“一个偏序集的最少链划分数等于其最长反链的长度” 同样成立,所以我们可以得出求最少需要多少套导弹拦截系统其实就是求最少链划分数,也就相当于求最长反链的长度,所以第二问就转化为一个求最长上升子序列的问题了。 Dilworth定理:一个偏序集的最少反链划分数等于其最长链的长度...原创 2020-03-05 22:33:38 · 611 阅读 · 0 评论 -
2019牛客多校训练第八场B.Beauty Values( 思维 / (简单dp) )
题目传送门 题意 输入整数n,再输入n个整数a1,a2,⋯ ,an,表示一段序列,求序列的所有子区间里面不同数字之和。 说明:在序列1 2 1 3中, 区间[1,1],[2,2],[3,3],[4,4]各含1个不同数字 区间[1,2],[1,3],[2,3],[3,4]各含2个不同数字 区间[1,4],[2,4]各含3个不同数字故总和为:1×4+2...原创 2019-08-11 19:30:00 · 164 阅读 · 0 评论 -
背包问题
#include<iostream> using namespace std; int dp[102][1003]; int main() { ios::sync_with_stdio(false); int N,n,C,w[102]={},v[102]={}; cin>>N; while(N--) { cin>...原创 2019-04-09 14:17:09 · 325 阅读 · 0 评论 -
区间最大子段和 + 最大子矩阵和 + 最大m子段和(DP)
动态规划解法: dp[i]表示以a[i]为结束的最大连续子段和 因为是以a[ i ]为结束且是连续子段 那么 dp[ i ] 要么就是 a[ i ]本身, 要么 就是a[ i ] + 以a[ i-1 ]为结束的最大连续字段和 也就是 a[ i ] + dp[ i - 1 ], 所以 状态转移方程出来了 dp[i] = max( a[i], dp[i-1]+a[i] ) (引用自最大连...原创 2019-04-21 15:41:07 · 3365 阅读 · 0 评论 -
数字三角形
数字三角形:计算从三角形的顶至底的路径经过的数字和的最大值 #include<iostream> using namespace std; int dp[605][605],a[605][605]; int main() { ios::sync_with_stdio(false); int n,t,i,j; cin>>n; for(i=1;i...原创 2019-04-21 15:57:08 · 158 阅读 · 0 评论 -
最长公共子序列(LCS)
#include<iostream> #include<cstring> using namespace std; int dp[1002][1002]; int main() { ios::sync_with_stdio(false); int T; cin>>T; char a[1002]={},b[1002]={}; ...原创 2019-04-21 15:58:49 · 149 阅读 · 0 评论 -
Codeforces Round #574 (Div. 2)——C. Basketball Exercise(简单DP)
题目传送门 简单的dp题,考虑选与不选两种状态 #include<bits/stdc++.h> typedef long long ll; using namespace std; ll n,a[100005],b[100005],dp[2][100005]; int main() { ios::sync_with_stdio(false); while(!(cin&g...原创 2019-07-19 00:49:48 · 404 阅读 · 0 评论