区间dp
CoderCat.
大
展开
-
洛谷P1063_区间dp
#include #include using namespace std; const int maxn = 222; int a[maxn]; int dp[maxn][maxn]; int n; int main() { int i, k, len, l, r; scanf("%d", &n); for(i = 1; i <= n; ++i)原创 2018-05-04 16:45:35 · 226 阅读 · 1 评论 -
洛谷P1880石子合并_经典区间dp模板
#include #include using namespace std; const int maxn = 110; const int INF = 214748364; int a[maxn<<1]; int maxdp[maxn<<1][maxn<<1], mindp[maxn<<1][maxn<<1]; int sum[maxn<<1]; int main() { i原创 2018-05-04 17:45:14 · 168 阅读 · 0 评论 -
洛谷P2308_区间dp_输出路径和中间过程
#include #include using namespace std; const int maxn = 25; int n, dp[maxn][maxn], gap[maxn][maxn];//g是断点位置 int ll[maxn], rr[maxn];//该位置数字的左/右括号数 int a[maxn], sum[maxn];//数字,前缀和 void dfs2(int x,原创 2018-05-05 16:16:51 · 215 阅读 · 0 评论 -
HDU - 5115 经典区间dp
题意:给定n个狼的攻击值ai和附加攻击值bi,每杀死一匹狼i,受到的伤害等于i的攻击值和与i相邻的狼的附加攻击值。求杀死所有的狼受到的伤害的最小值。 dp[i][j]:杀死区间i~j的狼受到伤害的最小值。 初始化: a[0]=a[n+1]=b[0]=b[n+1]=0; for(int i = 1; i <= n; ++i) dp[i][i] = a[i]+b[i-1]+b[...原创 2018-09-05 17:05:34 · 214 阅读 · 0 评论 -
hdu5693 区间dp
题意:给定n个数ai,再给定m个公差di。每次从ai中选择连续的x个数(x>=2),若这x个数构成等差数列且公差在bi中存在,则可以删去这x个数。求最多可以删去多少数 dp[i][j]:i~j最多可以删去多少数 初始化j-i==1和j-i==2的情况。 判断端点转移即可 #include <cstdio> #include <map> #include <...原创 2018-09-05 21:03:09 · 265 阅读 · 0 评论 -
POJ - 3042 区间dp 左端点右端点01
题意:在一维坐标系下,给定n个草坪的坐标(1<=n<=1000),再给定起点L(1<=L<=1e6)。每个草坪有一个staleness值,初始化为0。每次走一格,所有的staleness值+1,并且要从起点遍历每一个草坪,求staleness值的最小值。 离散化处理n个点 dp[i][j][0]:区间[i, j]已经遍历完,目前在i点时,staleness的最小值。 ...原创 2018-09-03 22:49:43 · 423 阅读 · 0 评论