随笔分类 - 动态规划
摘要:2013年山东省赛F题 Mountain Subsequences先说n^2做法,从第1个,(假设当前是第i个)到第i-1个位置上哪些比第i位的小,那也就意味着a[i]可以接在它后面,f1[i]表示从第一个开始,以a[i]为结尾的不同递增序列的个数,要加上1,算上本身。正反各跑一遍,答案加一下(f1
阅读全文
摘要:The more, The Better依赖背包+树形dpf[x][j+1]=max(f[x][j+1],f[x][j+1-k]+f[i->n][k]);我的一个疑问就是这k个节点会不会选重复,答案是不会的,因为从一开始就不会重复,根据dp原理回溯的时候过程是一样的,也是不会重复的 1 #inclu
阅读全文
摘要:背包问题是否装满问题我之前写背包都没怎么注意这个问题,上一道题遇到了还以为是读错题了,因为题解的做法和正常背包好像没有什么区别,但它有个细节是初始化,一旦要满足装满,那么f[0]=0,其他的都要f[i]=inf;当前只要有不是inf的值就可以保证一定是满的,可以递推的思想去理解。
阅读全文
摘要:poj3311我写的第一篇状压dp,调试了好久23333,其实状压就是二进制结合位运算,把整体的状态用二进制来表示,一般是0/1,用没用过或者走没走没走过的问题,其实这种思想在搜索中也有涉及过,与dp结合灵活度较高。状态占1维,还有其他维。这个题就是f[i][j]表示,i状态下,当前在j位置的最短距
阅读全文
摘要:b[i]表示长度为i的最长不下降子序列的最小末尾元素的值显然它是单调递增的,满足二分性质,然后就可以愉快地二分啦. 这个做法是错误的!!!!!!!(划掉 这个方法是正确的,替换的时候虽然位置顺序换了,最终输出来的答案不对,但是是存在正确答案替换回去的,想出这个方法的人也是真的nb! #include
阅读全文
摘要:分组背包for(一共多少组) for(体积从大到小) for(第i组的所有物品) 这样的顺序就保证了,对于每一个体积,只可能放这一组里的一个物品。
阅读全文
摘要:P1025 数的划分f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i-j][j].初始化f[i][i]=1
阅读全文
摘要:P1020 导弹拦截打的最多是最长不下降,最少是最长上升,因为打了小的一个就必须再开一个系统。
阅读全文
摘要:P2031 脑力达人之分割字串字符串dp,f[i]表示主串到第i个字符,最多能分割成多少子串。f[i]=max(f[i],f[k]+1);k是能匹配到的前一位。
阅读全文
摘要:对背包的新理解刚才做个一个贪心题,特别像多重背包,如果物品的价值都变成了1,就成了贪心。因为花少的代价得到的价值是1,花多的代价也是1,就是贪心。而且这题数据范围在long long,多重背包(二进制拆分)显然是跑不出来的,虽然这么做是正确的。 P2983 [USACO10FEB]购买巧克力Choc
阅读全文
摘要:方案数背包当凑面值为0时,有且只有一种方案,初始化,f[0]=1
阅读全文
摘要:P1510 精卫填海二分答案二分背包容量,判断能否满足v。判断的话就跑01背包就好了。
阅读全文
摘要:P1799 数列_NOI导刊2010提高(06)f[i][j]表示前i个数删去j个数得到的最大价值。if(i-j==x) f[i][j]=max(f[i][j],f[i-1][j]+1); else f[i][j]=max(f[i][j],f[i-1][j]); f[i][j]=max(f[i-1]
阅读全文
摘要:P2789 直线交点数分成两种情况,一种是平行直线,一种是自由直线,在自由直线中可以存在平行直线,但是不能和第一组的直线平行。自由直线和平行直线的交点是i*(n-i)。
阅读全文
摘要:P1356 数列的整数性打的骗分,在多组数据的情况下还能骗到分,可以了。又TMD是dp。f[i][j]表示+-第i个数能否达到%p后的余数j,如果f[n][0]==true就可以。
阅读全文
摘要:P3147 [USACO16OPEN]262144一道非常有趣的游戏,不,题目。当数据水时,可以这样表示状态。f[i][j]表示合并[i,j]区间所能得到的最大值,有点floyed的小味道。if(f[i][k]==f[k+1][j])f[i][j]=max(f[i][k]+1,f[i][j]);不断
阅读全文
摘要:P1279 字串距离一看就是字符串dp,然而并不会,骗分之后爆零了。以后dp题要好好想想转移方程。f[i][j]表示是a串选了前i个字符,b串选了前j个字符的距离。显然(QAQ)f[i][j]=min(min(f[i-1][j]+k,f[i][j-1]+k),f[i-1][j-1]+abs(a[i]
阅读全文
摘要:【智力大冲浪】riddle内存限制: 128M【题目描述】例 1 智力大冲浪(riddle.pas)。【题目描述】小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者 m 元。先不要太高兴!因为这些钱还不一定都是你的。接下来主持人宣布了比赛规
阅读全文
摘要:P2246 SAC#1 - Hello World(升级版)典型的字符串dpf[i][j]表示a串匹配到i,b串匹配到j的方案数。if(a[i]==b[j])f[i][j]=f[i-1][j-1]+f[i-1][j];if(a[i]!=b[j])f[i][j]=f[i-1][j];显然可以用滚动数组
阅读全文