DP
文章平均质量分 77
Lei2015_
这个作者很懒,什么都没留下…
展开
-
CF 366C。。。 鏖战了一晚上了 一道要换换角度的DP
这道题让我想起来一道已知各个砝码重量,问总共有多少种平衡状态的题目。 给出n个食物的味道和热量数值,做出一道菜,这道菜所用的食物的味道总和比上热量总和为K。求这种情况下味道值最大为几。 sumT为这道菜的味道之和 sumC为这道菜的热量之和。 sumT/sumC=K 等价于 sumT+sumC*K=0 这样的话我们的状态就是sumT+sumC*K。原创 2013-11-25 03:09:12 · 935 阅读 · 0 评论 -
HDU 2089 数位 dp 入门
可暴力,可dp。dp 参考:http://wenku.baidu.com/link?url=i8xMqZbuONRtQcN8YMs8y__w9oLwDMSp9O-GcMd4IH0OTiBs6jAHArv3lZYJ381YSE1eIm6z4vcm35S7M7xFp51sb4uRoggCe0zfyzsVNtC做这道题的时候有两个疑问第一:既然在dp中 51 既可以看做 51 也可以原创 2014-03-16 13:53:22 · 521 阅读 · 0 评论 -
UVA 11081 要开两个数组dp 然后合并 奇葩。。
目前为止,见过最奇怪的dp,没有之一. 题意是给你仨字符串,用第一个字符串的子序列组装成第三个字符串,子序列在组装的时候也可以拆开,但是顺序不能变就是了。 就是看看第 n 个位置上的字母有几种选择嘛。 比如 abc abc abc a 有两种选择,b 有两种 c 也有两种, 总共就 2*2*2=8 种。 我们只需要找出 构成 str3 的前原创 2014-03-15 16:50:48 · 505 阅读 · 0 评论 -
HDU 3555 水数位dp
和 hdu 2089 一样的思路,这个是找数字中带有 49 的,我dp的不带 49 的 一减就可以了。#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace s原创 2014-03-16 18:35:34 · 406 阅读 · 0 评论 -
POJ 1724 记忆话搜索dp
计算一个有向图从 1 到 N 在满足费用不超过K的前提下最短路是多少。。。就是dp 状态是 dp[i][j] i 是现在是第 i 个点 j 是这个点费用为 j ,里面包含的是最短路程。一个简单的剪枝是存下当前能到 n 点的最短路程,在搜索的过程中路程已经超过了这个路程就不用继续搜索了。#include #include #include #include #include #原创 2014-03-28 16:09:50 · 479 阅读 · 0 评论 -
vijos 1243 单调队列优化dp
这题虽然简单,但是还是让我学到一些东西的。题意。看到这种一个状态 需要 O(n) 的转移的东西,我想,八成都得是这种题。这道题一个简单的的实现是用 dp[i][j] 代表 到 第 i 步,最后用 j 机器生产最少消耗多少。因为 j 最多连续生产 l 个,所以,只能从前面 i-l 之后转移过来。转移方程看论文 点击打开论文。。。但是论文中没有说清楚的是要是用几个单调队原创 2014-03-18 03:15:48 · 774 阅读 · 0 评论 -
Codeforces Round 237 ABCD
A..有啥好说的的。。#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define READ freopen("acm.in","r",s原创 2014-03-20 02:03:20 · 441 阅读 · 0 评论 -
POJ 3042 决策对未来有影响的 DP
论文献上。。 Click Me~~对于这种问题,论文中已经讲的很清楚了,这个题和论文中第一题非常像。stl 中的 abs 真是鬼畜,本地和POJ 上不一样,老是说不确定#include #include #include #include #include #include #include #include #include #include #inclu原创 2014-03-20 22:41:01 · 473 阅读 · 0 评论 -
POJ 2750 环上线段树 略带DP 的线段树
求一个环上的最大连续子列的和。但是这个区间不能是整个换。做法:把环拆开。对于最大连续子列,有两种情况第一种情况,子列在 1~n 中,这样便可以直接求出第二种情况,子列既包括 1 又包括 n ,首先 最大列和最小列应该是不重合的(除非全是正数),如果重合,假设重合点是正数,则最小列可以更小,如果重合点是负数,则最大列可以更大,矛盾,然后,最大列和最小列应该全部覆盖整个环,证明和上原创 2014-03-22 17:34:44 · 421 阅读 · 0 评论 -
POJ 2029 矩形计数 简单 DP
给你一个矩形,以及矩形中的点,给你一个框框的长和宽,问这个框框最多框住几个点。。。。先预处理某点上不超框框最多几个。然后直接枚举答案就可以了。。。#include #include #include #include #include #include #include #include #include #include #include #incl原创 2014-03-22 21:09:27 · 543 阅读 · 0 评论 -
POJ 3280 简单区间 DP
就是想的时候不要想漏了转移方式。对于一个回文串 去掉最左和最右两个后依然是回文串,好了。。。dp 转移有三种,一种是从 dp[i+1][j] 转移过来,一种是从 dp[i][j-1] 转移过来,一种是从 dp[i-1][j-1] 转移过来#include #include #include #include #include #include #include #incl原创 2014-03-22 20:28:05 · 420 阅读 · 0 评论 -
POJ 1925 别人家的代码是厉害啊~
TTTT,T死我了,这么水的DP。。。。原来是。。。!(看了别人家的代码才知道!!而且看了好多遍。。)坐标乘的时候会超INT 啊。。好吧。。。这题思路:首先,蜘蛛侠Y坐标不会变。然后从一个点通过一个柱子到另一个点,就是 x 坐标对柱子做一次轴对称。枚举的时候,从每个柱子哪里开始枚举,直到前面的点不能转移到该柱子。#include #include #incl原创 2014-03-23 00:48:37 · 914 阅读 · 0 评论 -
POJ 1691 记忆化搜索解集合dp
首先处理出来每个方块的依赖关系。每个方块上面颜色如果和他不同的话,就从上面方块往下面指一条边。注意,他给的坐标是点,不是方块。。。总共有15个方块 s 是一个二进制数,i 位为1代表 方块 i 被涂上颜色。每次选择度数为 0 的方块涂色。然后跟新状态继续 dfs 。#include #include #include #include #include #include原创 2014-03-23 23:35:12 · 528 阅读 · 0 评论 -
POJ 3373 记忆化搜索 难在转移上的 dp...
这题我做了一个下午加半个晚上,做题的过程中实在是百感交集。。。甚至。。涌现了各种伤感。。。网上的题解都说的什么啊!!完全不知道在搞什么,代码一打一大串。。各种搞。。我觉得代码写的不优美,八成是没有把握题目的精髓。。。wata的代码就写的超级漂亮。。。这题是个dp,但是是有规定转移方向的 dp, 所有用搜索来做最方便体现题目中规定的方向。第一优先的,最少改变次数,那我就先试试不变原创 2014-03-23 21:05:22 · 543 阅读 · 0 评论 -
POJ 3034 (dp) 锤子尼玛能在棋盘外面。。出题不带这么坑的
打地鼠游戏,棋盘是 n*n 的,给你所有地鼠的位置和出现时间,锤子只能走直线,但是只能打到整数点上的地鼠。GCD可以帮助解决两点之间连线有几个点是整数点的问题。只是我的代码处理这个问题的时候有点长。。真的有点长。。。剩下的dp 很显然啊。。dp[t][x][y] 表示 t 时间锤子在 x , y 的时候最多砸几个。。。这个题啊。坑在。。。你怎么能把锤子放在外面还能算距离呢!!!原创 2014-03-24 22:45:33 · 571 阅读 · 0 评论 -
POJ 1947 树形 DP + 分组背包
做这个题的时候实在太虚了。。。状态都搞不清楚怎么来的。首先,我们不知道到底我们切出来的那棵树的树根到底是哪个。所以,有必要枚举一下树根。这样足以表示所有状态然后,对于每个树根来说,他做的是一个 分组背包,每个分组里面只能取一个物品的分组背包。而且,第一个物品很特殊——树根。如果不选这个,则下面的都不能选。既然我们的状态表示以此为根的子树,所以这个点,必须选。费用中的减一。。因为我们原创 2014-03-26 16:14:50 · 582 阅读 · 0 评论 -
UVA 11825 集合枚举 状态压缩 dp
枚举子集的飘逸写法http://www.cnblogs.com/jffifa/archive/2012/01/16/2323999.html原创 2014-03-14 14:24:46 · 561 阅读 · 0 评论 -
POJ 3311 旅行商问题 状态压缩 dp
最近做 DP 做的起劲啊。。。旅行商问题的状态压缩 dp[i][j] 表示 遍历 i 中所有城市一遍 并且现在在 j 的最短距离是多少。第一个点可以遍历两次所以先不设置为1,并且这个状态是合法状态,这个点曾经是最困扰我的。#include #include #include #include #include #include #include #include #in原创 2014-03-12 16:40:54 · 1091 阅读 · 0 评论 -
CF Round 235 D 状态压缩 dp
这是一个状态压缩 dp我发现,状态压缩dp难点就在于怎么设计状态的转换。这道题当时没有做出了来,眼睁睁的看着一道 dp 没过去。。。次奥。毕竟取摸这个运算,是没有后效性的,前面不管你是怎么搞的数,只要摸是一样的,再加上一个数的模我就可以唯一的确定。这样dp就有了根据。dp 的状态怎么想,毕竟只有 18 个数字,每个数字选不选,有(1那好 dp[1首先,真正的转移方式应该原创 2014-03-11 20:04:41 · 567 阅读 · 0 评论 -
UVA 147 水DP
wanquanbeibaowentizhuyi DOUBLE zhuan INT de shi hou si she wu ru.#include#includelong long dp[50000];int coin[11]={10000,5000,2000,1000,500,200,100,50,20,10,5};int main(){ dp[0]=原创 2013-11-25 14:24:47 · 573 阅读 · 0 评论 -
UVA562 Dvide Coins
又是一个判断是否存在某种状态的DP状态是左边减去右边的得数,01背包枚举出所有的状态,判断距离中点最近的点就好了。#include#include#includeusing namespace std;const int MAX=110000;int dp[2][MAX];int coin[200];int main(){ int *cur=dp[0]; int原创 2013-11-25 14:55:42 · 539 阅读 · 0 评论 -
UVA 348 DP 矩阵乘法 输出结果
递归输出结果。矩阵乘法每一格消耗O(n),结果行数等于左矩阵行数,列数等于右边列数。#include#include#include#include#includeusing namespace std;int dp[20][20];int res[20][20];int n;int row[20];int col[20];const int INF=0x3f3f原创 2013-11-25 17:01:25 · 704 阅读 · 0 评论 -
lower_bound与upper_bound还有fill的使用
STL一直很好用,今天使用了一下lower_bound和upper_bound函数,熟练使用可以减少写二分的时间。lower_bound是二分查找出大于等于给出的数的第一个值。upper_bound是二分查找出大于给出的数的第一个值。这两个函数都是返回的地址,所以使用还要减去首地址(如果数组里面保存的是int)下面是使用lower_bound优化最长上升子序列。由于长度相同的上原创 2013-11-28 15:49:51 · 690 阅读 · 0 评论 -
UVA 10354 nlogn LIS
nlogn的最长上升子序列(原理)。这是第一个trick。第二个,要左边和右边的相同,枚举每一个点作为最高点时的情况。两边取较小的那个再乘以2。#include#include#includeusing namespace std;#define MS(x) memset(x,0,sizeof(x))int up[20000];int down[20000];in原创 2013-12-07 13:50:44 · 656 阅读 · 0 评论 -
UVA 437. 叠罗汉
一堆正方体格子,每种格子有无限个,最高能叠多高。每一层的下面那个都必须严格大于上面那个(长和宽)dp[i][j][k] 若有n个格子的话最多转移3*n次,懒得搞了...每一个都转移99次,反正n对多为30,。dp[i][j][k]表示这是第i次转移,最上面那个是j,j的k面朝上。#include#include#includeusing namespace std;int c原创 2013-12-02 16:53:23 · 640 阅读 · 0 评论 -
CodeForce Round 219 Div2 E Watching Fireworks is Fun 单调队列DP
非常直观的单调队列优化的 DP这种每次更新都需要一大串从前的数据的DP就应该是需要线段树或者单调队列优化的 DP 了。题意:有一个街道放烟花,街道分成 N 块(1 dp[i][j] 为第 i 次放烟花的时候 happy 值, dp[i][j] = max (能到的地方的 dp[i-1][j] ) + 在 j 处的 Happy 值 。max (能到的地方的 dp[i][j] ) 这原创 2014-01-12 21:55:29 · 636 阅读 · 0 评论 -
POJ 2593 DP 多YY才能行
突然觉得, 那些算法没那么难学了,突然觉得,ACM,就是一个比YY能力的比赛了。想起成都的时候,LCC 大神说这场比赛对初学者和算法学得多的人来说没什么差别。现在想想也是,算法毕竟还是基础,YY能力和代码能力才能决定场上到底能出几道题。这道题纯YY的DP给N个数,求上面这个东西。一开始只想从前面开始怎么找子问题,这个S的子问题...确实不好找,后来就想直接套最长连续子列,用dp原创 2014-01-30 00:27:17 · 649 阅读 · 0 评论 -
概率 DP POJ 2151
蛮简单的一道概率 DP,有 t 个队,答 m 道题目,给出每个队伍答对每道题的概率求 所有队均答对一道题并且冠军答对不小于 n 题的概率冠军答对超过 n 等价于 存在一个队伍答题不小于 n ,对立事件 所有队伍答题少于 n(当然,在所有队伍答题不少于1的条件下)dp[i][j][k] 代表第i队,前 j 道题目 答对了K 道。我觉得 DP 还是表示状态很重要,表示清楚状原创 2014-02-07 00:22:41 · 494 阅读 · 0 评论 -
POJ 1837 简单 DP 二逼 DP = =
这个题,让我看到就想到最长上升子序列,1000的大小,n^2 就可以但是注意到,最高的两个士兵可以是相同身高的,所以,再求出左右两个最长上升子序列之后,最后得出结果的时候要注意这一点。这个地方 WA 了好多次, 这个题目的通过率这么低 应该就是这个点。#include #include #include #include using namespace std;#define原创 2014-02-09 23:21:39 · 431 阅读 · 0 评论 -
POJ 1850 递推 也是 dp 的一种啊
dp[i][j] 代表 长度 为 i 的 首字母 为 j 的字符串有多少个。转移就是不停的往现有字符串前边合法的增加字符串for(int i=0;idp[1][i]=1;for(int i=2;i{for(int j=0;j{for(int k=25;k>j;k--)dp[i][j]+=dp[i-1][k];}} i 代表长度 j 代表 首字母原创 2014-02-24 18:09:16 · 522 阅读 · 0 评论 -
POJ 1321 经典棋盘问题 的搜索和状态压缩解法
这就是 n 皇后问题,不过简单了点,对于对角线不做限制搜索,因为只有 8!个状态,直接数就可以了状态压缩dp,每一行用一排1010代表上面有没有放过旗子,1是放过,0是没有,这一个行的状态可以是完全来自以前或者在这一行合法的地方放一个棋子。每行有 2^n 种状态,共 n 行,每次转移要 n,总的就是 2^n*n*n;两种代码 #include #include #inclu原创 2014-02-25 18:45:17 · 750 阅读 · 0 评论 -
POJ 1191 棋盘分割 DP
我做DP的时候一般总是想怎么用状态把问题描述清楚,一般我认为状态描述清楚了,DP就顺利成章的写出来了。这个题,虽然我想了一会便想到 dp[i][x1][y1][x2][y2] 用这个来描述状态。但是我的子问题却没有想清楚,结果就使得自己的状态转移方程犯了错。一开始我是从上往下的,没有考虑下面的应该是最小才能这样,结果就错了。我的做法是可以,但是要改成记忆化搜索才好做,因为要得到下面原创 2014-02-17 17:37:00 · 505 阅读 · 0 评论 -
CodeForces Round 230 Div2 D
一道简单DP就汉诺塔,给出从 x 柱子 移动到 y 柱子的耗费,求在 n 个盘子的情况下,完成 汉诺塔最少需要多少耗费。首先一个盘子的情况原创 2014-02-19 22:22:34 · 479 阅读 · 0 评论 -
POJ 2955... dp
括号序列做了好多了#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define READ freopen("acm.in","r",stdin)#define ll lo原创 2014-03-11 20:40:13 · 427 阅读 · 0 评论 -
HDU 3033 分组背包
在背包九讲里还是在哪里看到的题目了。。。当时没做出来,重新做了一下。和传统分组背包不一样的是,这次每个组里面不止选一个了,对于每个组,我们还要做一个 01背包 。做 01背包的时候要一个一个物品的dp...还有注意节省空间的时候写正确价格的前进方向,应该从最大往小转移。这题,我一开始的时候竟然外层写的价格的循环,内层写的物品的循环 ORZ ,要是单纯一个分组,每组一个的话,原创 2014-03-26 00:17:21 · 443 阅读 · 0 评论