![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
cysjiang
这个作者很懒,什么都没留下…
展开
-
POJ 2955 Brackets(区间dp)
题目大意:给定一个括号序列,包含‘(’‘)’‘[’‘]’,问所有正确匹配的子序列中,长度最长的是多少。(每行一个数据,最后一行为“end”,表示数据结束。) 例:([][][) 其中包含的正确匹配的子序列长度为6,即([][]) 思路:区间dp。 一开始写的方程是: f[i][j]表示从i到j这个区间正确匹配的括号数。 那么如果i和j匹配,原创 2016-09-26 15:32:00 · 159 阅读 · 0 评论 -
HDU-6156 Palindrome Function
题意:定义函数f(n, k): 当n在k进制下为回文串时,f(n, k) = k; 否则 f(n, k) = 1; 给你一个区间 [L, R].对于区间的每一个数i, 计算 j 属于 l 到 r 进制的f(i,j) 的和。分析:因为进制的区间很小,我们可以枚举每一个进制k,计算[L, R]在k进制下有多少回文数。然后结果就是区间长度减去回文串数(这些事函数值为1 的部分)加上回原创 2017-08-20 20:34:17 · 425 阅读 · 0 评论 -
POJ 3252 Round Numbers
题意:计算区间 l 到 r 中的 round number 数,round number 定义为二进制形式下0的个数不少于1的个数的数。 分析:我开的状态比较麻烦f[i][j][k][l] i 表示i位,j表示是0多还是1多,k表示多多少,l表示有没有前导零。#include<cstdio>#include<cstring>using namespace std;typedef long lo原创 2017-08-20 17:09:56 · 194 阅读 · 0 评论 -
HDU 4734 F(x)
数位dp水题。#include<cstdio>#include<cstring>using namespace std;typedef long long ll;ll a, b, fa = 0, p = 1, ans;ll dp[12][10000];ll s[12], w[20] = {1};ll dfs(int pos, ll pre, int lim){ if(pos < 1原创 2017-08-20 15:37:06 · 207 阅读 · 0 评论 -
51nod 1154 回文串划分
想了好久,突然看到了话题是动态规划,就明白了。 先n^2预处理出来以每个字符结尾的回文串。然后动规,对于每一个字符,要么自成一家,要么接在前面的字符上。#include<cstdio>#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;string s;vect原创 2017-07-31 13:12:42 · 282 阅读 · 0 评论 -
URAL - 2018 The Debut Album (递推)
【题意】给你三个数n, a, b;表示对于一个长度为n且只有‘A’和‘B’ 的字符串,连续的‘A’ 的个数不能超过a个,‘B’不能超过b个。有多少种不同的字符串。 【分析】f[i][j][0] 表示长度为i的字符串,最后面连续j个都是‘A’的情况下有多少种,f[i][j][1]同样的意义表示‘B’。很明显当 j > 1 时 f[i][j][0] = f[i - 1][j -1][0]。但当j ==原创 2017-04-30 13:56:28 · 230 阅读 · 0 评论 -
HDU 1074 Doing Homework(状压dp)
【题意】给你一些要完成的作业,每个作业都有截止时时间和完成需要的时间,如果交作业的时间超过了截止时间老师就会扣分,每超一天扣一分。问应该怎么安排做作业的顺序使扣分最少。(如果有两种方法扣分相同,就按字典序排序,题目给出的顺序也是按字典序) 【分析】状态压缩dp: 我曾想过采用和背包类似的思想解题,但是没有成功,因为某个作业可能被重复做,这个状态不太好记录。 状压dp纪录状态,采用二进制的方法,原创 2017-03-16 16:08:46 · 204 阅读 · 0 评论 -
HDU 1069 Monkey and Banana(基础dp)
【题意】给你一些箱子,让你想办法把箱子摞的最高。箱子可以使用多次,也可以让任何一边做高,但是必须保证下面箱子的长和宽严格小于下面箱子的长宽。 【分析】因为箱子最多只有30个,每个箱子有6种摆法,所以最多有180个元素。可以dp[i]表示,第i个箱子最高可以摆多高。 dp[i] = max(dp[i], dp[j] + a[j].h); 记得排一下序,不然就有后效性了 【代码】#include原创 2017-03-16 13:21:34 · 201 阅读 · 0 评论 -
POJ 1661 Help Jimmy(基础dp)
【题意】场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。 设计一个程序,计算Jimmy到底原创 2017-03-17 16:05:40 · 164 阅读 · 0 评论 -
hdu 6170 Two strings
题意:给你两个字符串,第一个是普通的字符串,第二个中含有“点”和 “星”,“点”可以匹配任意一个字符,“星”可以让它前面的字符出现若干次。问你两个字符能不能匹配。 分析:我是用dp 写的,类似于最长公共子序列。状态开了三维,其实开两维就可以。f[i][j][k] 表示 第一个字符的前i个字符和第二个字符串的前j个字符匹配。k = 0 表示 字符和字符匹配,k = 1表示点和字符匹配,k = 3表原创 2017-08-22 17:32:36 · 926 阅读 · 0 评论