普通DP
文章平均质量分 68
BraketBN
这个作者很懒,什么都没留下…
展开
-
【BZOJ1003】[ZJOI2006]物流运输trans【最短路】【DP】
被水淹没,不知所措。#include #include using namespace std;const int maxn = 25, maxm = 405, maxq = 10000, inf = 0x3f3f3f3f;int n, m, k, t, head[maxn], cnt, q[maxq], id[maxm], st[maxm], ed[maxm], dp[原创 2016-03-01 19:02:25 · 565 阅读 · 0 评论 -
【BZOJ3875】[Ahoi2014]骑士游戏【最短路】【DP】
【题目链接】对于怪物u,普通攻击打死后产生的怪物为vi。设dis[u]表示打死u的最小花费,那么有dis[u] = min{s[u] + ∑dis[vi], k[u]}以这个为松弛条件,跑spfa就可以啦。然而BZOJ跑了29s...变为倒数rank1/* Telekinetic Forest Guard */#include #include #includ原创 2016-05-11 10:36:32 · 1106 阅读 · 0 评论 -
【BZOJ1093】[ZJOI2007]最大半连通子图【SCC】【DAG】【DP】
【题目链接】先SCC缩点,在DAG上跑最长路,顺便统计出到达每个点的最长路的路径个数。/* Pigonometry */#include #include #include #include #include using namespace std;typedef pair pii;const int maxn = 100005, maxm = 1000005, ma原创 2016-04-29 10:18:54 · 621 阅读 · 0 评论 -
【BZOJ1560】[JSOI2009]火星藏宝图【DP】
【题目链接】可以证明,如果有A->B->C,那么A->C一定不是最优的。然后搞一搞就行啦。/* Telekinetic Forest Guard */#include #include #include using namespace std;const int maxn = 200005, maxm = 1005, inf = 0x3f3f3f3f;int n, m原创 2016-05-02 18:44:23 · 457 阅读 · 0 评论 -
【BZOJ4428】[Nwerc2015]Debugging调试【DP】【记忆化搜索】【分块】
【题目链接】题解:最坏情况指的是出错位置始终在最长的区间里。为了使时间最少,我们每次一定是尽量均分区间。设dp[n]表示,在最坏情况下,处理n行代码所需要的最少时间。那么有dp[n] = min{(i - 1) * p + dp[ceil(n / i)]} + r意义是,将n行代码分成i块,那么需要加i - 1个printf,然后对最长的区间递归处理。直接枚举i是O原创 2016-05-13 14:57:14 · 916 阅读 · 0 评论 -
【BZOJ1133】[POI2009]Kon【DP】
【题目链接】设dp[i][k],表示前i个站台,在第i到第i+1个站台之间查票,一共查了k次票的最大人数。那么有dp[i][k] = max{dp[j][k - 1] + w},0 其中w = ∑A[x][y],j 把w在二维平面里画出来,刚好是A的后缀和。然后就可以转移了。行末换行的写法是学习的PoPoQQQ的(%%%)/* Pigonometry *原创 2016-04-22 17:09:14 · 492 阅读 · 0 评论 -
【BZOJ1633】[Usaco2007 Feb]The Cow Lexicon 牛的词典【DP】
【题目链接】数据范围都特别小,直接暴力就可以搞了。/* Telekinetic Forest Guard */#include #include #include using namespace std;const int maxn = 605, maxl = 27, maxm = 305;int n, m, dp[maxm], wlen[maxn];char word原创 2016-05-31 11:48:25 · 946 阅读 · 0 评论 -
【BZOJ1264】[AHOI2006]基因匹配Match【DP】【LCS】【树状数组】
【题目链接】相对于一般的LCS来说,这个问题可以直接得到某个字符在字符串内的位置。先把第一个串读入,处理出每个字符出现的位置。然后枚举第二个串,对于当前的字符,直接枚举这个字符在第一个串里出现的位置,然后转移。转移需要用到前缀最大值,用树状数组来维护。orz神题。/* Pigonometry */#include #include #include u原创 2016-04-23 11:51:08 · 437 阅读 · 0 评论 -
【BZOJ1584】[Usaco2009 Mar]Cleaning Up 打扫卫生【DP】
【题目链接】【hzwer的题解】维护转移位置的数组有点神。。/* Telekinetic Forest Guard */#include #include #include #include using namespace std;const int maxn = 40005, inf = 0x3f3f3f3f;int n, m, num[maxn], dp[max原创 2016-05-31 15:31:29 · 675 阅读 · 0 评论 -
【BZOJ1649】[Usaco2006 Dec]Cow Roller Coaster【背包DP】
【题目链接】设dp[i][j],表示前i个位置,花费为j,的最大有趣指数。然后类似背包一样转移。/* Telekinetic Forest Guard */#include #include #include using namespace std;const int maxn = 1005, maxm = 10005;int L, n, m, dp[maxn][ma原创 2016-05-31 18:06:20 · 808 阅读 · 0 评论 -
【BZOJ3072】[Pa2012]Two Cakes【DP】
【题目链接】题解:很容易想到O(n^2)DP的做法。(1)A[i] == B[j],dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1(2)A[i] != B[j],dp[i][j] = dp[i - t + 1][j - t + 1] + t,t表示最长的一段不相等的数的长度发现如果连续的一段内要填写的两个数都不相同,那么一定是贪原创 2016-05-08 16:16:03 · 1238 阅读 · 1 评论 -
【BZOJ4510】[Usaco2016 Jan]Radio Contact【DP】
【题目链接】看了半天题才看懂...题解:设dp[i][j]表示FJ走到第i步,Bessie走到第j步时,的最小花费。那么从dp[i][j]向dp[i + 1][j],dp[i][j + 1],dp[i + 1][j + 1]转移就完了。复杂度:时间复杂度O(nm),空间复杂度O(nm)收获:要留意到无后效性/* Forgive me原创 2016-06-10 11:43:09 · 1093 阅读 · 0 评论 -
【BZOJ1867】[Noi1999]钉子和小球【DP】
【题目链接】简单DP。。注意输出不能有换行。/* Think Thank Thunk */#include #include #include using namespace std;typedef long long LL;const int maxn = 55;int n, m;bool g[maxn][maxn];inline LL gcd(LL a,原创 2016-07-09 17:46:58 · 857 阅读 · 0 评论 -
【BZOJ1084】[SCOI2005]最大子矩阵【DP】
【题目链接】终于A了这题了。m = 1和m = 2两种情况分开做。对于m = 1,很简单的DP。设dp[k][n]表示前n个数字,分为k段的最大权值。(1)不取第n个数,dp[k][n] = dp[k][n - 1];(2)取第n个数,并组成新的一段,dp[k][n] = max{dp[k - 1][j] + sum[n] - sum[j]} (0 注意j可以取原创 2016-04-15 22:42:07 · 346 阅读 · 0 评论 -
【BZOJ3407】[Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题【01背包】
【题目链接】.../* Pigonometry */#include #include using namespace std;const int maxn = 505, maxm = 45005;int n, m, w[maxn], dp[maxm];inline int iread() { int f = 1, x = 0; char ch = getchar原创 2016-04-13 19:59:58 · 431 阅读 · 0 评论 -
【SPOJ-WACHOVIA】Wachovia Bank【01背包】
裸的。#include #include using namespace std;const int maxn = 55, maxm = 1005;int n, m, dp[maxm], c[maxn], w[maxn];inline int iread() { int f = 1, x = 0; char ch = getchar(); for(; ch '原创 2016-02-16 13:34:28 · 567 阅读 · 0 评论 -
【BZOJ1589】[Usaco2008 Dec]Trick or Treat on the Farm 采集糖果【SCC】【基环外向树】【DP】【记忆化搜索】
http://www.lydsy.com/JudgeOnline/problem.php?id=1589首先这是一个基环外向树,先tarjan缩点变成DAG,然后跑dp就行了。记忆化搜索写成了if(dp[x]) return x;一定是没睡好.../* Footprints In The Blood Soaked Snow */#include #inc原创 2016-03-18 08:49:08 · 979 阅读 · 0 评论 -
【TSINSEN-A1483】方格取数【DP】【随机数据】【单调栈】
2013年集训队论文题。看了题解后我是大写的懵逼。(这OJ竟然还有代码风格分)/* Footprints In The Blood Soaked Snow */#include #include #include #include using namespace std;typedef long long LL;const int maxn原创 2016-03-06 19:43:18 · 764 阅读 · 0 评论 -
【SPOJ-BALLSAG】Ball Stacking Again【DP】
题意:数字三角形,取走一个数字,会把这个数字左上方和右上方的数字取走(这两个数被取走后还会取走他们俩上面的数字,类似连锁反应),每个数字的贡献只算一次。问最大贡献。从上到下DP,但是要去重。转移一开始写的n - 1转n,不好写,最后改成n转n + 1了,也不用特判边界了。#include #include using namespace std;c原创 2016-02-22 15:34:27 · 451 阅读 · 0 评论 -
【SPOJ-ALIEN2】Aliens at the train, again!【DP】
题意:有两个火车站A和B,每个有n个站台,每个站台有一些人。外星人从1号站台开始出发(他可以选择从A或者B开始),每次他可以继续沿着当前火车站走,或者切换到另一个火车站。如果在第i号站台切换,那么遇到的人数就是Ai+Bi。但是外星人遇到的人数总和不能超过k。问你外星人最多能走到几号站台,最少能遇到多少人。(如果下一步遇到人数总和大于k,那么外星人会在当前站台下车。)比较简单的dp。原创 2016-02-22 16:33:17 · 612 阅读 · 0 评论 -
【BZOJ4300】绝世好题【DP】【LIS】
【题目链接】很容易想到O(n^2)的LIS做法,但是显然是不行的。把所有数用二进制表示,发现由递推我们可以得到,最长的子段全部的数字&起来必须至少有一位为1,即这些数字的这一位都是1。那么我们只需要对二进制的每一位,找一个这一位全是1的最长子段即可。听说这是个傻逼题?/* Footprints In The Blood Soaked Snow */#inclu原创 2016-03-31 17:59:00 · 322 阅读 · 0 评论 -
【BZOJ1708】[Usaco2007 Oct]Money奶牛的硬币【完全背包】
【题目链接】裸完全背包,这题为什么是gold.../* Footprints In The Blood Soaked Snow */#include #include using namespace std;typedef long long LL;const int maxn = 10005, maxv = 30;int n, m, v[maxn];LL dp[ma原创 2016-03-31 19:43:47 · 648 阅读 · 0 评论 -
【BZOJ1296】[SCOI2009]粉刷匠【区间DP】【背包DP】
【题目链接】区间DP+背包,感觉比较厉害的题。【qpswwww的题解】/* Footprints In The Blood Soaked Snow */#include #include using namespace std;const int maxn = 55, maxt = 2505;int n, m, t, f[maxn][maxn], sum[maxn]原创 2016-03-31 20:38:54 · 493 阅读 · 0 评论 -
【BZOJ1609】[Usaco2008 Feb]Eating Together麻烦的聚餐【最长不下降子序列】
【题目链接】正反做一次最长不下降子序列,显然答案是n减去最长不下降子序列的长度。/* Footprints In The Blood Soaked Snow */#include #include using namespace std;const int maxn = 30005, inf = 0x3f3f3f3f;int n, num[maxn], dp[max原创 2016-03-31 22:40:14 · 999 阅读 · 0 评论 -
【SPOJ-COINS】Bytelandian gold coins【DP】
题意:价值为n的硬币,可以换为价值为n / 2, n / 3, n / 4的三枚硬币。给出n,问最大硬币总和。(n 设dp[i]表示价值为i的硬币可以获得的最大价值。显然有dp[i] = max(i, dp[i / 2] + dp[i / 3] + dp[i / 4])但是数组太大,于是先算出一段数值内的dp,大于这个数值的用搜索就好了。#inclu原创 2016-02-25 14:11:27 · 552 阅读 · 0 评论 -
【BZOJ1177】[Apio2009]Oil【前缀和】【分类讨论】
【题目链接】一开始想搞三个单调队列跑,似乎会T,没思路,看了发题解,吓傻。【trinkle的题解】读入优化会RE,于是贡献了一发RE.../* Pigonometry */#include #include using namespace std;const int maxn = 1505;int n, m, k, s[maxn][maxn], a[ma原创 2016-04-06 09:13:17 · 789 阅读 · 0 评论 -
【BZOJ1531】[POI2005]Bank notes【多重背包】
【题目链接】照着论文打了一发,发现还挺好玩。/* Pigonometry */#include #include #include using namespace std;const int maxn = 20005;int n, m, dp[maxn], w[maxn], c[maxn];inline int iread() { int f = 1, x = 0;原创 2016-04-26 15:47:50 · 705 阅读 · 0 评论 -
【BZOJ1806】[Ioi2007]Miners 矿工配餐【DP】
【题目链接】设dp[i][a1][a2][b1][b2]表示,前i个食物,第一个矿场最后两次的食物分别为a1、a2,b1、b2同理,所得到的最大煤炭数。/* Think Thank Thunk */#include #include #include #define rec(i, x, y) for(int i = x; i <= y; i++)using namespac原创 2016-07-09 18:39:46 · 716 阅读 · 0 评论