动态规划
文章平均质量分 71
liverpippta
这个作者很懒,什么都没留下…
展开
-
hdu 3530 单调队列dp
这么一个破题折腾了我两天,还能说神马。。。烂的不能再烂了。。。。应该说我刚开始想的还是基本正确的,但“基本”是不能容忍的。。。就是记录两个单调队列,一个单调不递减,另一个单调不递增。记录从后往前数的最大值和最小值,枚举以i为最后一个元素的符合题目要求的序列。当两个队头的差大于k时,这说明需要调整,增大最小值或减小最大值,缩短区间。至于我犯得两个错误,在这里就不说明了。然后就是确定区间长度,代码原创 2012-10-13 16:55:38 · 1008 阅读 · 0 评论 -
HDU 4345 数学+dp
这道题的背景是一个置换,1个置换的循环是它子置换的最小公倍数,所以这道题可以转换成1个纯数论问题,将n划分为若干数,这些数组成的最小公倍数有多少种?DP弱啊。。。竟然不会,5555后来看了几篇题解(包括zz1215的)。大概我有个地方没有想明白刚开始dp[i][x]表示当前和为i,且包含最大质因子不超过素数表第t个素数的情况状态转移时dp[i][x] = dp[i-x][t-1]+原创 2013-08-06 16:57:47 · 906 阅读 · 0 评论 -
差值序列计数 HDU 3450
这个差值序列想到不难想,即便是不暴力,线段树也能处理。大概就是排序,离散化,然后维护dp(x),表示以序列中第x小的数为结尾的子序列的个数看似简单的水题,WA了差不多10次,好可怕。。。。之前在ZOJ还做了一道类似的题。。。。弱到爆,主要是有一个地方没有处理好比如这样一组数据2 3 2 2 2如果你线段树更新时,dp(x)=sum(v,w),则这样的数据就会WA但改成d原创 2013-07-18 12:18:52 · 928 阅读 · 0 评论 -
POJ 2923 状态压缩
这题不难,但过得人不多啊,POJ才不到600人过。。。。做的时候也比较顺利,仅仅PE了一次。题意,有两辆车,容量分别为V1,V2,每次要运一定的物品到新家,经过几次后,把所有物品都运到新家,问最少用多少次。N看起来不难,但想起来总感觉有点乱。想了半天才知道咋做。首先预处理,分别搞出两辆车一次性可装的物品的状态。接下来用f[i][x]表示第一辆车经过第i次的装运(可以小于i),能原创 2013-05-28 18:41:58 · 730 阅读 · 0 评论 -
SGU 132 状态压缩
这道题重点在于不能有连续两个相邻的空格,不光是横向的连续两个空格的空格,还有纵向的连续两个空格也不行(把握这个这题就OK了)。之前做了一些铺瓷砖的压缩DP题,都没有在纵向有神马限制。这也是这道题的难点所在。刚开始想的状态转移方程错了(想了好半天才发现是错的。。。T..T),原因是不能解决我说的内个重点问题,于是把内个加入到DP的状态当中。DP[N][S][Q]表示第N行状态为S,Q表示第n原创 2013-05-22 12:42:26 · 1132 阅读 · 2 评论 -
HDU 4512 LCIS
明显把这题想简单了。。。。WA了好多次,后来题解中提到LCIS。。。才知道咋回事,弱成虫。。。。。。。LCIS,即最大单调上手公共子序列令dp[i][j]表示为s1串前i项,s2串前j项,并以b[j]为结尾的最大单调公共子序列则当a[i]!=b[j]时,dp[i][j]=dp[i-1][j]反之,dp[i][j]=max{dp[i][j],dp[i-1][k]},b[k]原创 2013-05-04 21:14:25 · 787 阅读 · 0 评论 -
SGU 168
我的算法比较麻烦。。。T_T........有直接动态规划的算法,其实就是求一个区域内(图形是矩形切一个角)的最值问题。。根据MIN(G) = MIN(G1,G2),其中G1UG2=G即可。根据这个公式搞出动态规划转移方程,由于我不是按照这样做的,故不加描述,请去到这里http://hi.baidu.com/zyz913614263/item/4c05bdc8b59f5842bdef6原创 2013-05-18 19:55:23 · 822 阅读 · 0 评论 -
状态压缩棋盘问题2道 sgu131&poj1038
SGU 131dp[i][s],表示第i行状态为s的时的数量,这个时候按照题意扩展可行的上一行状态t,则dp[i][s]=sum{dp[i-1][u-t]},其中u为(2^m)-1...状态转移略麻烦,一次性写不对的话,debug真心受不鸟了。。。。附代码:#include #include #define N 11#define M 520#define u (1<<m)-原创 2013-04-25 18:02:33 · 750 阅读 · 0 评论 -
第一道树形dp ural 1018
很久很久就听说过这个东东了,但由于拙计的dp,没咋动。。。那就现在抓紧吧网上找了些资料,基本上第一道例题都是它,题意不说了,确实比较简单,状态方程很容易想到。。题中说的是保留M个树枝,这里把它换成保留M+1个节点我觉得更好~f[i][j]=f[p][k]+f[q][j-1-k],其中p是i节点的左子节点,q是它的右子节点,对叶子节点初始化省略了。。。。初始化的时候,最好把f[i][j]原创 2013-04-22 18:16:59 · 697 阅读 · 0 评论 -
状态压缩基础题2道
最近队友们都在专注状态压缩,于是果断凑凑热闹。。。。昨天看了他们正在看的一份资料,写的非常不错,话说国家集训队论文对我这个小菜鸟而言高深莫测,各种看不懂,这份资料可以说写的相当不错,由浅入深,最重要的是细节部分写的很到位(PS:其实看集训队论文还是经典的,但需要读者有较好的基本功的)对状态压缩已有了最基本的了解,尤其是预处理意识对初学者来讲很重要的,它可以减少代码复杂度和时间复杂度。此外,位运原创 2013-04-05 23:40:23 · 762 阅读 · 0 评论 -
POJ 1159 最长公共子序列的应用
DP已经弱到不能再弱的程度了。。。。那就从最基本的做起吧!!看队友博客里面有这题,做了,读完题,没思路,才知道,一个叫最长公共子序列的东西不知道(注意与最长公共子串分开)最长公共子序列作法:dp[i][j] 表示s1串中前i个字符,s2串中前j个字符所组成的两个串的最大公共子序列长度若s1[i]=s2[j] dp[i][j]=dp[i-1][j-1]+1否则:dp[i][j]=原创 2013-02-26 21:29:42 · 1047 阅读 · 1 评论 -
hdu 3555 数位dp
这是最简单的数位dp,也是我第一道数位dp....话说以前这样的题,根本不敢下手。只有下手了,挑战了,才能逐步战胜困难。畏惧是永远不行的对于数位的问题,要逐位化简。之前看了看cxlove大湿的博客,看了几行,也就是dp的状态和阶段,当然转移方程完全没看。dp[i][0]:从0~(10^i-1)有多少个数不含“49”dp[i][2]:从0~(10^i-1)有多少个数含“49”重点是d原创 2013-03-09 15:32:07 · 769 阅读 · 0 评论 -
zoj 1530 记忆化搜索
一直想做这样的题,果然做完之后有了些领悟,代码打得无比生疏,花了老长时间才过的~刚开始也没神马思路,搜了搜解题报告,大多数都是爆搜,这样没有意思,后来找到了一篇用记忆化优化搜索做的,给力~dp[i][k][j]:是否存在一个n位数,i位,以k数字大头,模n为j.值分0,1,2:若为0,不存在这样的数,值为1,上一位也就是第二位为0,值为2,上一位为1.way[i][k][j]:状态与前原创 2013-02-21 22:01:05 · 704 阅读 · 0 评论 -
POJ 3276 dp
一道很水的dp....不过本人dp实在是太烂了...题意:问母串中至少去掉多少个字母才能是刚好由单词表中的一些单词连接而成的。思路:dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数。dp[i]有两种选择dp[i + 1] + 1,min{dp[i + w] + w - strlen(word[j])},1附代码:#include #include原创 2013-02-11 17:30:55 · 1144 阅读 · 0 评论 -
CF 162-div2 D 数学+dp
一道运用数学特征的dp题,尽管现在很忙,但是这样的题值得去做....O(n*n)的算法是很容易被想到的,直接暴力即可,但铁定超时,这个时候就要运用数学规律来解决......仍然令d(x)为以数x位结束的最长数列的长度。f(x)是max(d[p]),其中x是p的约数。这样复杂度大概为O(n*sqrt(n))....附代码:#include #include #include #defin原创 2013-02-02 17:38:23 · 949 阅读 · 0 评论 -
poj 2229 dp
想了好久不会,再一看4K人过,真是弱出翔来了。。。。(话说之前POJ上1K+过的纯数论我无压力)早上膜拜了FOVERLIN大牛的博客(这题就是从他博客中选的),看了思路,顿时感悟。。。。题意略掉,我们假设规定序列按从小到大的顺序,当N为奇数时,第一个数必须为1,所以F(I)=F(I-1)。。当n为偶数时,分两种情况讨论,若第一个数为1,则F[I]=F[I-1],若第一个数不为奇数,则所有数原创 2012-11-23 10:35:13 · 1200 阅读 · 0 评论 -
hdu 2604 DP+矩阵二分
实际上就是这样一个问题,一个序列仅由1和0组成,问n位不带101和111子序列有多少个,结果模m话说这是集训的一道题,当时完全没思路,今天做了一下,还是没有做出来,不过好歹还会用最裸的记忆化搜索。。。但肯定超时(话说集训那时真的弱爆了。。超弱的1B)看了下解题报告,发现1维DP既能搞定,再用矩阵二分。。其实这个DP怎么推出来的呢?就是分类讨论出来的。。(哎,其实真的很简单,但偏偏想乱了,这原创 2012-11-16 16:39:50 · 743 阅读 · 0 评论 -
zoj 3662
嘿嘿,后天就期中考试了,不过鸭梨不算大,复习的也差不多了,再加上根本没心思看,话说现在对学校的功课真的是越来越厌烦了。。。今天还不错,刷了2个题,还都是现场赛的题。。。这题其实早就像做了,就是今年东北赛区的H题(幸亏没有去,要不然肯定是铁)下午的时候在zoj上做了模拟赛,过掉K题时,我就开始想这题。。后来怎么也没有想出来,不过猜测这是个DP。。后来听学长说,果断是。。看了@zz_1215的代码原创 2012-11-06 22:44:40 · 947 阅读 · 2 评论 -
ZOJ 3644 记忆化搜索
哎,只有牵扯到图,就啥都不会。。。。现在实在有必要学习一下,尤其像这道题,不是图论的DP题基本上看爱神博客的吧把握一点,就是无论到哪个点,当前值均为K的约数。先求K的约数,离散化,DP[X][Y],代表到达第X的节点,数值为K的第Y个约数的路线数。搜索的时候,参数为节点和值,由于随着搜索的深度加深,值一定会越来越大,避免了环路,于是就是个简单的搜索问题了,附代码:#include原创 2013-08-12 11:29:49 · 1001 阅读 · 0 评论