![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Start_动态规划
文章平均质量分 72
绝风
这个作者很懒,什么都没留下…
展开
-
poj3267 The Cow Lexicon
解题思路动态规划 题意就是给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列。PS:是匹配单词序列,而不是一个单词 不多说,看程序主要是知道状态方程的含义dp[i]表示从message中第i个字符开始,到第L个字符(结尾处)这段区间所删除的字符数,初始化为dp[L]=0由于我的程序是从messag原创 2014-03-05 22:22:45 · 423 阅读 · 0 评论 -
POJ 3666 Making the Grade [DP]
题意:给定一个序列,以最小代价将其变成单调不增或单调不减序列,这里的代价看题目公式。思路:很容易想到是DP。1.对前i个序列,构成的最优解其实就是与两个参数有关。一个是这个序列处理后的最大值mx,和这个序列处理的代价值cost。显然最大值mx最小最好(这样第i+1个值可以不花代价直接接在其后面的可能性更大),cost最小也最好(题意要求),但是两者往往是鱼和熊掌。用dp原创 2014-07-03 23:55:19 · 662 阅读 · 0 评论 -
POJ2392 SpaceElevator [DP]
题目大意:有一头奶牛要上太空,他有很多种石头,每种石头的高度是hi,但是不能放到ai之上的高度,并且这种石头有ci个将这些石头叠加起来,问能够达到的最高高度。解题思路:首先对数据进行升序排序,这样才是一个标准的多重背包的问题为什么要排序?因为只有这样才能得到最优解,如果一开始就是高的在前面,那么后面有低的却不能选到,就直接选高的去了。这样是不能达到最优解的使f[i]的状态标记,原创 2014-07-04 02:27:51 · 830 阅读 · 0 评论 -
HDU2993 MAX average problem [斜率dp]
题意:给你一段长度为n的数列, 求其长度不小于 K 的平均值最大的子串。解析:抄的解析http://www.docin.com/p-469236754.html 例二[分析]简单的枚举算法可以这样描述:每次枚举一对满足条件的(a, b),即a≤b-F+1,检查ave(a,b),并更新当前最大值。然而这题中N很大,N2的枚举算法显然不能使用,但是能不能优化一下这个效率不高的算法呢原创 2014-07-27 15:23:51 · 656 阅读 · 0 评论 -
CF 366C Dima and Salad [天平DP]
题目大意:n个水果,水果有甜度和卡路里两个属性,选择一些水果,使得甜度之和与卡路里之和比例为k,并且使得甜度之和最大我们可以定义二维dp,dp[当前游标扫到的个数][平衡度]=当前平衡度下最大的ai和,平衡度定义为ai-bi*k,很巧秒的定义方式,可以节省一维时空。注意到平衡度可正可负(范围在-10000到10000)我们可以定义如下int m[1111][22222]int原创 2014-08-18 11:39:29 · 678 阅读 · 0 评论 -
CF 460C Present 【DP+想法】
给你n棵花的高度,m天,每天可以浇连续的w朵花,每天一次,一次花增长1个单位高度求m天后,最矮的花最高是多少 最大最小问题可以用二分来解 首先我们可以得到所有花的最矮高度即答案的下界,给这个花浇m天即是答案的上界然后二分枚举答案,检验合法性。 如何检验合法性 我们用个数组来记录need[i]表示i点需要浇的次数(从i点开始的区间)我们再用一个变量原创 2014-08-23 03:24:48 · 801 阅读 · 0 评论 -
CF 417D Cunning Gena [状压dp+排序]
历程: 完全自己做的。WA了一炮long long ,WA了一炮排序,T了几炮,然后把三元的dp数组拆成几个2元的就过了看来三元的dp数组还是慢。题意:一个人有n个朋友,有m个问题要解决,买一个显示器要b块钱,他的朋友能帮他解决一些问题,但是需要酬劳,也需要这个人有相应的显示器数量。现在这个人要解决所有的问题,问解决所有问题的最小花费是多少。问题数量为20,2^20大概是100W的样子原创 2014-08-22 19:54:40 · 431 阅读 · 0 评论 -
CF 258B Little Elephant and Elections [dp+组合]
给出1,2,3...m求出a1,a2,a3,a4,a5,a6,a7的排列共有原创 2014-08-23 02:30:48 · 768 阅读 · 0 评论 -
CF 379D NewYearLetter [dp+暴力]
题意:给出k,x,n,m找出这样的字符串s1,s2,s1长为n,s2长为m给出规则,sn=sn-1+sn-2使得第Sk项出现x个"AC"子串 我们很容易知道k次运算后有几个12,几个21,几个22子串,有几个串1,有几个串2如果我们知道s1中出现了几个AC,s2中出现了几个ACs1头和尾,s2头和尾巴我们就能算出k次后能出现几个AC现在正好反过来,我们都不知原创 2014-08-23 23:15:36 · 859 阅读 · 0 评论 -
CF 372B Counting Rectangles is Fun [dp+数据维护]
题意,给出一个n行m列的矩阵里面元素是0或者1给出q个询问a,b,c,d求(a,b)到(c,d)有多少个由0组成的矩形我们定义即为求(a,b)到(c,d)有多少个由0组成的矩形对一个矩形来说dp[a][b][c][d]=dp[a][b][c][d-1]+dp[a][b][c-1][d]-dp[a][b][c-1][d-1]+包含右下角(当前点)的矩形;重原创 2014-08-24 15:02:13 · 1032 阅读 · 0 评论 -
CF235 Let's Play Osu![dp+概率]
题意:给n个位置,给出1-n上每个位置出现O的概率pi,记分规则如下,连续的x个O记为x^2分,求和,如 XXOOOXOXOOXX得分为求得分的期望思考一下,我们能比较容易地得出O(n^2)的方法令dp[i]为前i的得分期望那么显然这题考虑一下变换记分的方式我们有那么记分方式就变为一段连续的O,有多少对O×2+O的个数原创 2014-08-23 17:28:18 · 940 阅读 · 0 评论 -
CF 132C Logo Turtle[dp+记忆化搜索]
给出一串由FT构成的串,F代表前进,T代表转向,初始方向是1,转向后F由1变为-1(或者-1变成1)例如FTFFFTFFFFF值为3给出n,必须做n次操作(让F变为T或者让T变成F),求最远能离原来的地方前进多远(绝对值)可以搜索来解决这个问题对每次行程,我们可以选择继续按当前方向走或者改变方向那么,粗略估算一下,字符串最长为100,那么就是2^100,原创 2014-08-25 17:35:32 · 709 阅读 · 0 评论 -
Codeforces 148E Porcelain [预处理+dp背包]
给出n行数,每行的数目不定(不超过100个),只能从原创 2014-08-26 15:42:04 · 463 阅读 · 0 评论 -
Codeforce 401D Roman and Numbers[数位DP+状态压缩]
给出数n和m,求n的所有排列中,模m得0的有多少个 n(1 ≤ n 18) andm (1 ≤ m ≤ 100).暴力法我们直接枚举n的所有排列,显然18!超时。考虑怎么dp假设给了我们数n=23765显然有(237%m*10+6)%m=2376%m(367%m*10+2)%m=3672我们很自然的想到了这样的状态转移dp[i][k]i代表取原创 2014-08-26 13:52:05 · 890 阅读 · 0 评论 -
Codeforces 354C Vasya and Beautiful Arrays[dp+暴力]
题意:给出n个整数,对每个整数可以减去0-k的任意一个数求这样操作后,n个数的最大GCD是多少分析:我们首先可以知道n个整数中最小的数是多少而且,最终的答案肯定不大于这个数这个n个整数中最小的数是答案的上限然后对于答案的下限可以肯定的是1肯定是答案的下限2呢?3呢?为什么1一定是其实,0-k+1,都可以作为答案为什么?可以把k想象成一个剪原创 2014-08-25 14:17:05 · 733 阅读 · 0 评论 -
CF 463D Gargari and Permutations [dp]
给出一个长为n的数列的k个排列(1 ≤ n ≤ 1000; 2 ≤ k ≤ 5),求这个k个数列的最长公共子序列的长度dp[i]=max{dp[j]+1,where j#include #include #include #include #include #include #include using namespace std;#define pb push_back原创 2014-09-01 13:09:13 · 879 阅读 · 0 评论 -
POJ1054 The Troublesome Frog [dp]
艰难的写上一篇,小学期太累了,,,很难坚持刷#include #include #include #include #include #include using namespace std;int m,n;int num;struct Grid{ int x,y;}grid[5555];int cmp(const void* a,const void* b){原创 2014-07-03 02:36:39 · 589 阅读 · 0 评论 -
Codeforces 245H Queries for Number of Palindromes
很简单的回文dp[i][j]表示从str[i原创 2014-05-12 20:32:34 · 536 阅读 · 0 评论 -
poj1260 pearls
转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1300164274大致题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。【规定买任一类的珍珠n个(价格为p),都要支付(n+10)*p的钱,即额外支付10*p】 例如样例Input的第二个例子:转载 2014-03-06 11:07:46 · 412 阅读 · 0 评论 -
poj3176 cow bowling
大致题意:输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线。规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个数中的一个。太简单了,应该是属于那种无脑的dp题目a[N+1][N+1]存数据(为什么用N+1而不是N呢,因为我们用1-N的下标存,为什么不是0-N-1呢,因为每行的首元素的上一行只有右边,细细原创 2014-03-06 21:19:45 · 466 阅读 · 0 评论 -
poj2533 LongestOrderedSubsequence
最长上升子序列dp[i]全初始化为1result=max{dp[1],dp[2],.....,dp[n]}对每个dp[i]有dp[i]=max{dp[j]+1当aj代码#include #include #include #include #include #include using namespace std;int max(int a,int b){原创 2014-03-06 11:30:48 · 441 阅读 · 0 评论 -
poj1191
均方差公式比较复杂,先将其变形S^2 = 1/n∑(Xi - X)^2 = 1/n(n*X^2 + ∑Xi^2 - 2*X∑Xi) = 1/n∑Xi^2 - X^2; X表示均值 由于均值是一定的(它等于方格里的数和除以n),所以只需要让每个矩形的总分的平方和尽量小 对于左上角(x1,y1),右下角(x2,y2)的正方形,设原创 2014-03-07 15:26:31 · 576 阅读 · 0 评论 -
poj2385-dp经典
这道题目虽然不难,但是还是算很经典的动态规划题目了。题意很简单,两颗苹果树每一分会有树落下苹果,有人去接,但是来回两个树之间的次数是一定的,所以求出在最大次数时最多能接到多少苹果。 状态方程一开始是想对了,但是还是有些细节没有注意啊。比如:开始的时候在tree1下面,这样如果给出显示第2颗树落下苹果的话,初始化代码就得改变,所以分两种情况。另外就是dp状态方转载 2014-05-07 00:35:32 · 494 阅读 · 0 评论 -
POJ3616 MILKING TIME
题意:你有一头奶牛,你能够在一定的时间里挤奶。而且挤奶量也不同,每次挤奶要休息r时间,问你最大可以挤多少奶。水题一道,看完就知道一定是对时间段dp,然后就是两个for的事了。只要前面能满足条件的状态就可以转移过来,然后取最大,不过要先排序。状态设定:dp[i]表示从开始取,到满足取第i段的最优值。原创 2014-05-07 01:40:26 · 506 阅读 · 0 评论 -
POJ1742 coins
多重背包罢了f[i]代表价值为i的原创 2014-05-08 17:28:43 · 454 阅读 · 0 评论 -
POJ3046 counting ants
题意:T种蚂蚁,共计A只,种内没有区别,问含有x只蚂蚁的子集有多少种(x∈[S,B])题解:动态规划,dp[i][j]代表用前i种蚂蚁凑成j只蚂蚁的集合的方法数,由于T*A太大,用滚动数组实现,最后输出的是答案mod 1000000#include #include #include #include #include #include #define SCAND(x)原创 2014-05-08 21:13:46 · 534 阅读 · 0 评论 -
POJ3181 Dollar Dayz
题意:给出两个数,n,m,问m以内的整数有多少种组成n的方法思路:一看就是完全背包,然后果断敲了,提交,WA,寻找原因所在,发现输入1000,100,时候,输出的明显是垃圾值,那么这题很明显后面的结果会很大,然而循环1000*100的话,用大数绝对超时,参考别人的代码后,才发现能够用将大数分开处理的方法,下面是原理 整数划分是把一个正整数 N 拆分成一组数相加并且等于 N 的问题.比如:65 +原创 2014-05-09 22:02:20 · 454 阅读 · 0 评论 -
POJ1631 Bridging signals
解答:#include using namespace std;int psearch(const int f[],int size,const int a){ int l = 0,r = size-1; while(l<=r) { int mid = (l+r)/2; if (a>=f[mid-1]&&a<f[mid]) return m原创 2014-05-10 20:50:00 · 477 阅读 · 0 评论 -
CF414B Mashmokh and ACM 【序列DP】
DPdp[j][i]代表原创 2014-05-12 20:50:30 · 603 阅读 · 0 评论 -
poj1655 Balancing Act 【树形DP(很弱)】
都不知道怎么分类了。大概要求一个树中以某个结点为根的子树结点个数,还有儿子结点中以儿子结点为根的子树结点个数的最大值,用递归得到n[i],以i为根节点的子树结点个数#include #include #include #include #include #include #include using namespace std;#define scan(a) scanf("原创 2014-05-16 20:57:31 · 694 阅读 · 0 评论 -
POJ 3254 Corn Fields 【状压DP】
【题目大意】一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)【解析】根据题意,把每一行的状态用二进制的数表示,0代表不在这块放牛,1表示在这一块放牛。首先很容易看到,每一行的状态要符合牧场的硬件条件,即牛必须放在能放牧的方格上。这样就能原创 2014-05-17 19:56:42 · 552 阅读 · 0 评论 -
codeforces 161D - Distance in Tree 树状DP
题目给出一棵树,求任意两点间距离为k的节点的个数方法是:深搜遍历整棵树的同时,对于每一个节点,每求出一个以其为根的子树中任意节点到其的距离数组后,先由乘法原理维护最终答案,再维护其遍历过的子树到其距离数组乘法原理,即,因为k可由(1, k-1) (2, k-2).....(k - 1, 1)构成(有顺序), 所以其所由可能为p[i] * q[k - i] (1原创 2014-05-13 11:39:02 · 503 阅读 · 0 评论 -
Hdu 4035 Maze (dp求期望)
按这个顺序来做做poj2096->poj3329原创 2014-05-13 22:47:10 · 461 阅读 · 0 评论 -
ZOJ 3543 Number String 【2011大连区域赛】【dp】
题意给出一串由D,I,?构成的长为n的字符串,这个字符串表示满足某种规则的1到n+1的排列集合,D表示该位置数字比前面一个小,I表示该位置的数字比前面一个大,?表示不确定可D可I比如满足DI的数字排列有3,1,2和2,1,31设计的dp如下dp[i][j] 代表满足上述字符串前i-1项的长为i尾巴为j的1到i的排列数目当第i-1项为D时dp[原创 2014-10-22 19:31:32 · 1165 阅读 · 2 评论