![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
yang_bro
For my dreams I hold my life ,for wishes I behold my night. ---Nightwish
展开
-
hdu 3401 Trade 单调队列+dp
题意比较简单就不赘述了。dp[i][j]表示第i天,拥有j支股票时的最大获利。对于第i天,一共有三种状态:(1) 不买也不卖, dp[i][j] = dp[i-1][j].(2)自第i-w-1天进行买或卖之后,再买入一些股票。因为第一种情况的存在,所以这里只需考虑第i-w-i天,i-w-2, i-w-3...都可以忽略。dp[i][j] = dp[i-w-1][k] + (k-j原创 2013-05-10 13:00:52 · 958 阅读 · 0 评论 -
hdu 4756 Install Air Conditioning(2013南京网络赛)
题意就是求MST中删去一条边后,次小生成树最大的那颗。注意题中说了“ there are so many wires between two specific dormitories” 。也就是说与0节点(power plant)相连的MST边是不会出故障的,所以要特殊考虑一下所有MST边都跟0节点相连的情况。删除MST中某条边后的次小生成树用树形dp解决,传送门我的理解是:删除MST边之原创 2013-09-23 13:13:48 · 2239 阅读 · 3 评论 -
hdu Disney's FastPass(状态压缩dp)
这种题我一直喜欢用bfs搞的,但是这个题不太好bfs,主要是我刚开始想的是通过边进行状态转移,这样很不好写。。。于是就坑爹了,调了很久sample都没出。。。于是学习了一下别人的思想。。。通过“目的”来进行状态转移而不是边。当你在某个点的时候,你可以为了游历某个景点去某个点,也可以为了获取某个点的票而去某个点。能想到这一点的话状态转移方程就很好写了,但是也要能想到啊。。。ps:注意代码中的原创 2013-10-03 17:09:46 · 930 阅读 · 0 评论 -
hdu 4284 Travel(floyd + TSP)
虽然题中有n#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define FF(i, a, b) for(int i=a; i<b; i++)#defi原创 2013-09-09 17:24:25 · 1149 阅读 · 0 评论 -
CF 189 A Cut Ribbon
简单dp。。。由于切割后没块必须是a b c中一个,所以注意状态转移时前一个状态必须是可到达的(f[i] != 0)。。。#include#includeusing namespace std;int n, a, b, c;int f[4444];int main(){ while(cin>>n>>a>>b>>c) { memset(f, 0,原创 2013-07-10 16:30:09 · 949 阅读 · 0 评论 -
poj 3342 Party at Hali-Bula(树形dp)
树上的最大独立集, 树形dp水题。不过第二问判断解是否唯一还是第一次接触到。。。dp[i][0]表示i节点不取得到的最大集,dp[i][1]表示i节点取得到的最大集。用num数组记录当前状态数是否唯一。#include#include#include#include#include#include#includeusing namespace std;const int ma原创 2013-05-30 23:11:43 · 953 阅读 · 0 评论 -
hdu 1561 The more, The Better(树形DP入门)
由依赖关系建图,如果访问v节点必须先访问u节点,则加边(u, v)。由于题意给的是森林,所以添加0节点,点权值为0正好将森林转为有根树。dp[i][j]表示在i节点,还能访问j个节点所能获得的最大值,由于有0节点,所以答案便是dp[0][m+1]。对于边(u, v)状态转移方程:dp[u][j] = max(dp[u][j], dp[u][j-k] + dp[v][k]); 即在v及其子树原创 2013-05-29 23:08:09 · 787 阅读 · 0 评论 -
hdu 1011 Starship Troopers(树上的01背包)
树上面的01背包,挺好的题。刚开始01背包那部分自己yy了一下。。。然后就wa了。。。请教了别人一下后顿悟。。。跟hdu1561有点相似,dp[i][j]表示在i节点,体积为j时获得的最大值。对于一条边(u, v),状态转移方程为:dp[u][j] = max(dp[u][j], dp[u][j-k] + dp[v][k]);是不是跟1561一样?没错。。。将k个小兵分配到v子树上去刷怪,原创 2013-05-29 23:16:05 · 803 阅读 · 0 评论 -
hdu 3033 I love sneakers!
本来想着早起一水的。。。结果拖到现在才解决。。。题意是有k种鞋子, 每种鞋子有num种,每种都有其价格和value。要求给定m块钱,每种鞋子至少买一种,求最大的value值,不能满足则输出“Impossible”。算是背包变形吧。想了很久,觉得就要接近正确思想了,但是每种鞋子至少买一种那部分不知道怎么搞,刚开始写了个枚举每一种鞋子第i种必买,然后对剩下的做01背包的程序,无奈sample都过不原创 2013-05-15 14:18:49 · 779 阅读 · 0 评论 -
hdu 2191 (多重背包)
多重背包模板题。#include#include#include#includeusing namespace std;const int maxn = 111;int n, m, V, f[maxn], cv[maxn], val[maxn], num[maxn];void ZeroOne(int cost, int value){ for(int j = V;原创 2013-05-14 16:34:22 · 742 阅读 · 0 评论 -
hdu 1978 How many ways (记忆化搜索)
题意:中文题。。。记忆化搜索即可,对于点(i, j), dp[i][j] += dp[k][l]; ( 点(k, l) 可到达 ) .不过忘了剪枝。。TLE了两次。。#include#include#include#includeusing namespace std;const int maxn = 111;const int MOD = 10000;int n, m,原创 2013-05-14 10:49:39 · 665 阅读 · 0 评论 -
hdu 1025 Constructing Roads In JGShining's Kingdom(LIS)
这题读懂了就是一个LIS问题, 早就在刘汝佳的大白书上见过LIS的O(n*logn)的方法,这次算是碰上模板题了。。。其中STL的( lower_bound(array, array+n, key)-array )返回array数组中array[i]大于等于key的最小i。不过这题的输出很坑人。。。ans=1的时候是“road”,其他是“roads”。。。#include#include原创 2013-05-14 16:00:08 · 660 阅读 · 0 评论 -
POJ 3186 Treats for the Cows
题意在题目描述里面已经给的很详细了,用dp[i][j]表示从i~j的区间选择所能获得的最大值。 状态转移方程也不难:dp[i][j] = max(dp[i+1][j] + v[i]*a, dp[i][j-1] + v[i]*a); a是指v[i]的age,显然 a = n - j + i .#include#include#include#includeusing nam原创 2013-05-13 10:47:14 · 867 阅读 · 0 评论 -
hdu 2159 FATE (dp)
又看到一个以前见到过的题。。。但当时不知二维背包为何物。。。还是比较裸的二维背包的。状态转移方程: dp[j][l] = max(dp[j][l], dp[j-v[i]][l-1] + cost[i]);其中dp[i][j] 表示消耗度为i,刷怪数为j时得到的最大经验值,由于每种怪都有无数个,是完全背包模型,注意三个for中循环的顺序。#include#include#incl原创 2013-05-12 16:23:17 · 714 阅读 · 0 评论 -
hdu 1176 免费馅饼 (dp)
去年暑假的时候就看到这个题了,当时太菜了。。完全不知道做。。。今天看到了网上的hdu dp46题,准备暑假前把这46个题搞了,正好看到了这个免费馅饼,怒A之。状态转移方程 :dp[i][j] = max(dp[i][j], max(dp[i-1][j], max(dp[i-1][j-1], dp[i-1][j+1])) + v[i][j]);其中dp[i][j]表示第i秒在坐标j时得到的最原创 2013-05-12 16:18:53 · 795 阅读 · 0 评论 -
hdu 3681 Prison Break(dp || dfs)
15Y。。。不过离当时的 hdu4766 21Y还有一段距离。。。刚开始拿到这题就bfs TLE了一发。。。然后发现图中那些空地是可有可无的,于是可以把图中所有F G Y抽象出来建图,然后bfs。这个思路基本正解了吧?于是就wa了一整晚。。。拉着ljy yy了一晚上,总觉得bfs是可以转移所有状态的。。。但是就是wa到死。。。然后就发现了网上的人都是用dp来完成状态转移的。。为什么bf原创 2013-10-22 13:54:32 · 1178 阅读 · 0 评论