【区间dp】
张松超
这个作者很懒,什么都没留下…
展开
-
NYOJ ~ 737 ~ 石子合并(一)(区间DP)
思路区间dp,也是我写的第一道区间dp题,首先我们先求出来所有的两堆合并的最小代价(最小区间),然后再求所有三个合并的最小代价,依次递推。再算合并的代价时如果一个一个去加就太浪费时间了,所以我们求一个前缀和就好了;定义表示合并l ~ r区间需要花费的最小体力,首先一堆的时候不用合并所以dp[i][i]=0,其他的初始化为INF。我们枚举区间长度 len 从2~n,然后在枚举区...原创 2017-07-14 17:14:27 · 654 阅读 · 1 评论 -
HDU ~ 4283 ~ You Are the One (区间DP)
题意T组测试数据,每组输入N,表示有N个人要上台表演,然后输入这N个人的不开心度。如果第i个人第k个上台表演,那么他的不开心度就是d[i]*(k-1)。现在有一个狭窄的小黑屋,导演可以暂时让人先进入小黑屋中,然后让后面的人去舞台表演,因为小黑屋很狭窄所以最先进去的人最后才能出来,问怎么安排才能使所有人的不开心度最小,输出这个不开心度。思路dp[i][j]dp[i][j]dp[i][j]表示...原创 2018-12-10 21:51:34 · 260 阅读 · 0 评论 -
ZOJ ~ 3469 ~ Food Delivery (区间DP)
题意一个人要送外卖,现在,在X轴上有N个人,先输入n,x,v,表示n个人,骑手一开始在x位置,他的速度是v,然后N行输入X[i]和B[i]表示这个人在x[i]位置,每分钟的等待都会增加b[i]的愤怒度,想要更多的回头客,所以骑手需要安排一个送外卖的方案使得所有人总的愤怒度最小,输出这个愤怒度。思路首先对于每个人我们肯定要按坐标位置排个序,我们把骑手也当做一个点放进去。dp[i][j][0...原创 2018-12-09 22:03:46 · 245 阅读 · 0 评论 -
POJ ~ 1651 ~ Multiplication Puzzle(区间DP)
题意多组测试数据,每组输入一个长度为n的数组,每次可以挑选一个值,然后获得该值乘以左右两边的分数,不可以挑选两端,求只剩下左右两端的最小分数。思路最优矩阵链乘的变形。dp[i][j]dp[i][j]dp[i][j]表示[i,j][i,j][i,j]区间的最小分数dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]∗a[k]∗a[j])(i<k&l...原创 2018-12-09 19:01:34 · 234 阅读 · 0 评论 -
HDU ~ 4745 ~ Two Rabbits (区间DP,环形序列的最长回文子序列)
题意有两只兔子和一个N块石头组成的环,他们在这个环跳,A顺时针跳,B逆时针跳,有一个要求他们两个每时每刻必须站在相同质量的石头上,跳过的石头不能再跳,两个人的起点任意(可以相同),求两只兔子步数之和的最大值?思路问题就相当于:环形序列的最长回文子序列。环形序列,其实我们把原串往后复制一段就OK了。dp[i][j]dp[i][j]dp[i][j]表示[i,j][i,j][i,j]区间的最优...原创 2018-12-13 15:47:48 · 369 阅读 · 0 评论 -
HDU ~ 4632 ~ Palindrome subsequence(区间DP,容斥,回文子序列个数)
题意T组测试数据,每组给你一个序列,问这个序列有多少个回文子序列,mod104+7mod\quad 10^4+7mod104+7思路dp[i][j]dp[i][j]dp[i][j]表示[i,j][i,j][i,j]区间有多少个回文子序列①s[i]!=s[j]s[i]!=s[j]s[i]!=s[j],通过容斥可得dp[i][j]=dp[i+1][j]+dp[i][j−1]−dp[i+1][...原创 2018-12-12 21:21:59 · 291 阅读 · 0 评论 -
POJ ~ 3280 ~ Cheapest Palindrome(区间DP,变为回文子序列最小代价)
题意给你长度为N一个字符串,和M个字符,对于每个字符有两种操作:增加或删除,各有一个权值,问将这个串变为一个回文串的最小花费是多少?思路dp[i][j]dp[i][j]dp[i][j]表示将[i,j][i,j][i,j]区间变为回文串的最小花费那么状态转移很容易想到:①如果s[i]==s[j]s[i]==s[j]s[i]==s[j],那么dp[i][j]=dp[i+1][j−1]dp[...原创 2018-12-12 20:29:47 · 311 阅读 · 0 评论 -
HRBUST ~ 1376 ~ 能量项链(区间DP)
思路区间DP模板题,就是题意有点麻烦。dp[i][j]表示从 i 到 j 的最大值。#include <bits/stdc++.h>using namespace std;const int MAXN = 205;typedef long long LL;int n, a[MAXN], dp[MAXN][MAXN];int main(){ while (~sc...原创 2018-10-18 21:17:58 · 203 阅读 · 0 评论 -
LightOJ ~ 1422 ~ Halloween Costumes (区间DP)
题意Gappu要去参加一个万圣节晚会,你依次要出场 N 个场合,每个场合需要你扮演的人物不一样。Gappu是一个爱干净的人,它不会穿脱下来的衣服(因为它已经脏了),你可以穿很多件衣服,问你最少需要准备多少件衣服?思路明显的区间DP,定义表示从L~R区间最少需要穿多少件衣服,那么初始化状态dp[i][i]=1,其他状态为INF就好了。如果a[L]==a[k]证明我们L和k需要穿...原创 2018-07-24 17:57:08 · 209 阅读 · 0 评论 -
CodeForces ~ 981D ~ Bookshelves (贪心 + 区间DP)
题意:N个数字分成K份,最大价值为多少?总价值为将每段的和&(按位与)。思路:对于结果ans最多不超过2^60,贪心选择从高位选每一个二进制位。对于第i位时,判断是否能够在保证前面i-1个二进制位不改变的情况下使得当前位为1,如果可以就让当前位为1。检查的是个区间DP,dp[i][j]表示前 i 个元素分为 j 份时使得前(当前位-1)个二进制位不变的情况下是否能使当前位为1。#inclu...原创 2018-05-31 17:54:25 · 338 阅读 · 0 评论 -
HDU ~ 2476 ~ String painter(区间DP,好题)
题意现在有两个字符串A,B,现在有一种操作是可以将A的某一段全变为同一个字符,问将A变成B最少需要多少次操作?思路可以发现是区间DP,如果考虑直接将A变为B,A和B有的字符相同有的不同不太好DP。我们可以分两步来,先计算出来把一个空串刷成B的花费,然后在计算把A变为B的花费就比较好计算了首先看第一步:定义dp[i][j]dp[i][j]dp[i][j]为把[i,j][i,j][i,j...原创 2018-12-11 19:40:44 · 442 阅读 · 0 评论