摘要:
坐标dp 坐标型dp一般都是给定网格、序列,来求满足某种性质的最大值、最小值。f[i][j]代表以i、j结尾的满足条件的某种情况。 典型例题:传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵 阅读全文
摘要:
区间dp 区间dp属于线性dp的一种,以“区间长度”作为dp的“阶段”,用两个坐标(区间的左、右端点)描述每个维度。区间dp中,一个状态往往由若干个比它更小且包含于它的区间所代表的阶段转移而来,所以区间dp的决策往往就是划分dp的方法。(例:f[i][j]=f[i][k]+f[k+1][j]) 区间 阅读全文
摘要:
线性dp 具有线性阶段划分的动态规划算法被统称为线性dp 经典例题有: 1.最长上升子序列(lis) 2.最长公共子序列(lcs) 3.数字三角形 这里给出最长上升序列的代码 for(int i=1;i<=n;i++){ f[i]=1; for(int j=1;j<i;j++){ if(d[i]>d 阅读全文
摘要:
背包dp 背包dp的模型可以看作是“给定n个物品,从中选择一定的物品”。 我们从以下几个角度考虑: 1.已经选择的物品 2.背包容量 dp数组常常保存最大价值 0/1背包(一个物品只选一次) #include <bits/stdc++.h> using namespace std; const in 阅读全文