区间DP
文章平均质量分 82
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
HDU 4283 You Are the One(区间DP)
题意和思路:参照大牛博客点击打开链接#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define maxn 100000#defi原创 2016-03-29 22:18:51 · 359 阅读 · 0 评论 -
HDU 5115 Dire Wolf(区间DP)
思路:区间DP水题#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define INF 1e9int dp[205][205];int a[205原创 2016-05-07 22:01:09 · 825 阅读 · 0 评论 -
Zoj 3469 Food Delivery (区间DP)
题意:有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员以V的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了以后有更多的家庭订购,要将外卖送到的情况下使得所有用户的不开心值总和达到最小思路:很明显,每多走一分钟,没送到的家庭的不开心值都会加倍,假设dp[i][j][0]表示从i到j用户送到时候的最小不开心原创 2016-04-02 11:55:27 · 332 阅读 · 0 评论 -
POJ 2955 Brackets(区间DP)
题意:给你一串由()[ ] 组成的序列,问能匹配的最大长度是多少思路:区间DP入门,定义dp[i][j]为区间i到j的最大匹配数,若s[i]=='('&&s[j]==')'的话显然有dp[i][j]=dp[i+1][j-1]+2,接下来更新区间dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j])#include #include #include原创 2016-03-27 00:11:56 · 247 阅读 · 0 评论 -
LightOJ 1422 Halloween Costumes (区间DP)
题意:你要连续去很多个舞会,给出n个舞会你需要穿的衣服的编号,一旦脱下就不能再穿,但是可以一件套一件,问最少需要准备多少件衣服。思路:区间DP,令dp[i][j]为第i到第j天需要的衣服,那么对于第i天,如果考虑后面没有和它重复的话,那么dp[i][j]=dp[i+1][j]+1, 如果存在某一天a[i]==a[k],dp[i][j]=min(dp[i][j],dp[i+1][k-1]+dp[原创 2016-03-27 09:30:31 · 479 阅读 · 0 评论 -
poj1651 Multiplication Puzzle(区间DP)
题意:给出一串数字,第一个和最后一个数字不能抽取,每一次抽取一个数字得到的价值为这个数字和相邻两个数字的乘积,问把整个序列最后只剩下第一个和最后一个数字时的最小价值。思路:区间DP经典题,我们令dp[i][j]为第i到第j个数字去光后的价值,转移方程dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[j]*a[k])#include #i原创 2016-03-27 15:33:58 · 243 阅读 · 0 评论 -
POJ 3661 Running(区间DP)
题意:给你N分钟,每一分钟可以走Di的路程,同时每分钟增加1的疲劳度,最多不能超过M疲劳度,对于每一分钟你就可以选择跑或者休息,如果休息的话只能休息到疲劳度为0的时候才能继续跑,问这N分钟你可以走的最远路程并且疲劳度为0思路:我们令dp[i][j]为第i分钟疲劳度为j时候走的最大路程,那么显然对于每一分钟有两种决策,要么跑,那么dp[i][j]=dp[i-1][j-1]+d[i],要么选择休息原创 2016-03-27 16:35:20 · 295 阅读 · 0 评论 -
POJ 3280 Cheapest Palindrome(区间DP)
题意:给你一串字符串,你可以在字符串上对每一个元素进行增加或者删除的操作,分别给出每个元素增加和删除的代价,求最少代价使得这个字符串变成回文串思路:我们令dp[i][j]为i到j成为回文串的最小代价,对于s[i]有两种选择增加或删除,dp[i][j]=min(dp[i+1][j]+add[s[i]],dp[i+1][j]+del[s[i]]); 对于s[j]同样两种操作,dp[i][j]=mi原创 2016-03-27 17:36:28 · 255 阅读 · 0 评论 -
POJ 1141 Brackets Sequence(区间DP)
题意:给出一串包含()[]的字符串你,你可以在任何位置添加()或者[],输出使得这个串合法的最终字符串思路:令dp[i][j]为i字符到j字符需要添加符号的最小个数,那么如果s[i]==s[j],说明他们已经匹配了,那么只需考虑i+1到j-1个字符,那么dp[i][j]=dp[i+1][j-1]; 一般的,我们把i到j分成i到k,k+1到j的两个子序列,if (dp[i][j] > dp[i原创 2016-03-28 23:26:56 · 258 阅读 · 0 评论 -
HDU 2476 String painter(区间DP)
题意:给你一串字符串,一次可以修改一个或者多个连续的字符串,问最少操作多少次使得原串变成目标串思路:一开始完全不知道怎么DP...首先我们假设一个空串,先求空串变成目标串的最少次数,令dp[i][j]为i到j的操作次数,那么显然有dp[i][j]=dp[i+1][j]+1,如果目标串有s[i]==s[k],那么dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j原创 2016-03-29 15:52:17 · 532 阅读 · 0 评论 -
hdu5900 QSC and Master(区间DP)
思路:类似石子合并的区间DP,不过需要它们的key值的gcd>1的时候才可以合并,令dp[i][j]为i-j的最大价值#includeusing namespace std;#define LL long longLL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}LL dp[305][305];LL sum[305];int key[3原创 2016-09-25 15:44:28 · 310 阅读 · 0 评论