
====动态规划====
yxg_123
这个作者很懒,什么都没留下…
展开
-
HDU 4539 郑厂长系列故事――排兵布阵 状压dp
题目链接:https://vjudge.net/contest/159644#problem/H题意:注意 是曼哈顿距离恰好是2,恰好!!!题解:与poj1185差不多的… 滚动数组,否则MLE,是我MLE了…代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0原创 2017-04-21 22:08:21 · 463 阅读 · 0 评论 -
紫书动规 例题9-2 UVA - 437 The Tower of Babylon dp
题目链接:https://vjudge.net/problem/UVA-437题意:题解:dp[i][j]:=考虑到前i个立方体并且第i个立方体以标号为j为高的最大值代码:#include <bits/stdc++.h>using namespace std;const int maxn = 30+5;int N,blocks[maxn][3],d[maxn][3];void get_dimen原创 2017-03-15 11:20:47 · 249 阅读 · 0 评论 -
紫书动规 例题9-1 UVA - 1025 A Spy in the Metro dp
题目链接:https://vjudge.net/problem/UVA-1025题意:题解:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst原创 2017-03-14 23:20:22 · 236 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj1631 Bridging signals 最长递增子序列
题目链接:http://poj.org/problem?id=1631题意:直接看样例,题意是啥?题解:LIS, O(nlogn)的,维护一个数组ans,手动模拟一下就懂了。代码:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long原创 2017-03-10 19:25:03 · 201 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj1065 Wooden Sticks 最长递减子序列
题目链接:http://poj.org/problem?id=1065题意:C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?题解:最小值其实等于按l递增排序后原创 2017-03-10 19:16:24 · 305 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj3181 Dollar Dayz 完全背包
题目链接:http://poj.org/problem?id=3181题意:农夫约翰有N元钱,市场上有价值1……K的商品无限个,求所有的花钱方案?题解:http://www.hankcs.com/program/cpp/poj-3181-dollar-dayz.html dp[i][j] := 用i种价格配出金额j的方案数。 那么dp[i][0] = 1,使用任何价格配出金额0的方案个数都是1(原创 2017-03-10 18:21:51 · 292 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj3046 Ant Counting dp
题目链接:http://poj.org/problem?id=3046题意:有T种蚂蚁,共A只。同一个种的蚂蚁长得一样,但是不同种的蚂蚁牙齿颜色不同。任取n只蚂蚁(S<=n<=B),求能组成几种集合?题解:dp[i][j] := 使用前i个种可以配出来j个的集合的个数。 那么dp[0][0] = 1,不使用任何蚂蚁配出空集的个数为1。挑战P69页的优化(O(n^2))真TM不懂 代码:#inclu原创 2017-03-10 17:38:20 · 260 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj2385Apple Catching dp
题目链接:http://poj.org/problem?id=2385题意:给你t,w 表示有t分钟掉苹果,你可以移动w次,求出在最大次数时最多能接到多少苹果。题解:dp[i][j] : 表示第i分钟 跑了j次 得到的最大值代码:#include <iostream>#include <cstdio>using namespace std;typedef long long ll;#def原创 2017-03-10 10:36:36 · 224 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj1742 Coins 多重背包
题目链接:http://poj.org/problem?id=1742题意:有n种面额的硬币,面额个数分别为A_i、C_i,求最多能搭配出几种不超过m的金额?题解:多重部分和问题。多重背包优化? O(n^2) dp[i][j] := 用前i种硬币凑成j时第i种硬币最多能剩余多少个(-1表示配不出来) 1.如果dp[i - 1][j] >= 0(前i-1个数可以凑出j,那么第i个数根本用不着)直接原创 2017-03-10 12:05:27 · 250 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj3280Cheapest Palindrome 区间dp
题目链接:http://poj.org/problem?id=3280题意:字串S长M,由N个小写字母构成。欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费。题解:dp[i][j]表示将原字串s的子字串s[i…j]变换成回文的最小花费 因为删除和增加一个字符都是一样的效果,取最小值就好了代码:#include <iostream>#include <cstdio>#include原创 2017-03-10 11:23:39 · 237 阅读 · 0 评论 -
挑战练习题2.3动态规划 poj3616Milking Time dp
题目链接:http://poj.org/problem?id=3616题意:奶牛Bessie在0~N时间段产奶。农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e。奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量。题解:定义dp[i]表示第i个时间段挤奶能够得到的最大值,拆开来说,就是前面 i – 1个时间段任取0到i – 1个时间段挤奶,然后加上这个时间原创 2017-03-10 11:01:34 · 285 阅读 · 0 评论 -
挑战2.7.3 Round 1C 2009 C. Bribe the Prisoners 区间dp
题目链接:https://code.google.com/codejam/contest/189252/dashboard#s=p2题意:题解:区间dp dp[i][j] 表示释放a[i]~a[j] 【不包含两端的囚犯】所需要的最小费用 枚举其中最先释放的最小费用 则 dp[i][j] = min(dp[i][j],dp[i][k]+dp[k][j]) {i+1<=k<=j-1}代码:#inc原创 2017-03-09 12:35:55 · 240 阅读 · 0 评论 -
hdu 3339 In Action 背包+flyod
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3339题意:给你一个图,每个点都有权值,然后让你派出多辆坦克,破环至少占权值一半的城市,派出坦克的代价就是从0点到那些城市的距离 求最少代价题解:点数很少,注意有重边 跑一发flyod,然后背包dp代码:#include <bits/stdc++.h>using namespace std;typ原创 2017-03-05 15:16:24 · 270 阅读 · 0 评论 -
BZOJ 1003 物流运输trans dijstra+dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1003题意:题解:首先我们必须机智的知道f[i]=min(f[i],f[j]+cost(j+1,i)+k)这个dp方程 cost(i,j)表示从第i天到第j天的最小花费 dijstra跑一发代码:#include <bits/stdc++.h>using namespace std;t原创 2017-03-03 23:24:10 · 508 阅读 · 0 评论 -
hdoj 4272 LianLianKan 数据太水
点击打开链接题意:给出一个序列,其中距离不超过6的两个相同的数字可以消除掉(从上往下消,输入是从底向上的),问能不能全部消除。思路:状压dp http://www.cnblogs.com/swm8023/archive/2012/09/10/2679455.html因为最坏情况下,它后面的四个数字能被它前面的四个数字消掉,这样它就能和原来是它后面的第9个元素相消了,最多原创 2017-02-24 15:00:16 · 200 阅读 · 0 评论 -
zoj3626 Treasure Hunt I 树上DP
点击打开链接题意:给你一颗树,然后每个点有一个价值,每个边有一个代价,然后问你,从k点出发,花费最多m/2的代价,能够取得最多的价值是多少。思路:树上背包问题,dp[i][j]表示从i点出发,花费j的代价所能取得的最大价值是多少。转移方程为 dp[i][j]=max(dp[i][j],dp[i][m-k-t[i][v]]+dp[v][k]) 就是以u为父节点 走不走v这个点原创 2017-02-23 19:39:54 · 253 阅读 · 0 评论 -
紫书动规 例题9-3 UVA - 1347 Tour dp
题目链接:https://vjudge.net/problem/UVA-1347题意:题解:改成两个人同时从最左点出发,沿着两条不同的路径走,最后都走到最右点,且除了起点和终点以外其余每个点恰好被一个人经过。 dp[i][j]:=第一个人走到i,第二个人走到j,且1~max(i,j)全部走过,还需要走多长的距离; 因为dp[i][j]=dp[j][i],所以规定i>j; 对于每个人,只允许走到原创 2017-03-15 11:46:47 · 292 阅读 · 0 评论 -
紫书动规 例题9-4 UVA - 116 Unidirectional TSP 多段图的最短路 dp
题目链接:https://vjudge.net/problem/UVA-116题意:题解:dp[i][j]:= 从(i,j)出发到最后一列的最小开销 因为字典序最小,所以每次往前一列转移,都要先从这列 行数最小的位置转移 dp[i][j] = min(dp[i][j],dp[row[k]][j+1]+a[i][j]); 边界是dp[i][m-1] = a[i][m-1]代码:#include原创 2017-03-15 13:12:40 · 493 阅读 · 0 评论 -
紫书动规 例题9-5 UVA - 12563 Jin Ge Jin Qu hao dp-01背包
题目链接:https://vjudge.net/problem/UVA-12563题意:题解:01背包 一直想二维,但是对于第i首,能不能唱只和时间有关,和前i-1首最多唱了多少没有关系,不能从dp[i-1]转移唱完了一首歌,以这首歌的结束时间判断是否到了下一首该唱的时间dp[j]:=以j为结束时间,最多唱了多少首,注意j一定要倒着枚举,否则就被当前这首歌覆盖了,就是这首歌唱了好几遍【完全背包】代原创 2017-03-15 14:46:01 · 336 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream 状压dp
题目链接:https://vjudge.net/contest/159644#problem/G题意:用1*2的砖去恰好铺满n*m的空间,有多少种方法题解:http://blog.youkuaiyun.com/xingyeyongheng/article/details/21692655代码:#include <iostream>#include <cstdio>#include <cstring>usi原创 2017-04-21 22:00:35 · 408 阅读 · 0 评论 -
hdu 3001 Travelling (状态压缩dp,三进制!)
题目链接:https://vjudge.net/contest/159644#problem/D题意:n个点,给出m条边,每条边有一个边权,每个顶点可以走两次 问走遍所有点的最小花费题解:http://www.cnblogs.com/martinue/p/5490432.html 对于状态S,第i位为1表示已经走过 dp[S][v]:=在S这个状态,走到v所用的花费 转移: dp[i+th原创 2017-04-21 21:26:36 · 580 阅读 · 0 评论 -
zoj3471 Most Powerful 状压dp
题目链接:https://vjudge.net/contest/159644#problem/F题意:研究人员发现有N个原子两两组合会发生反应产生能量,且其中一个会被和谐掉,给出一个矩阵map,其中map[i][j]表示原子i与j发生反应且原子j被和谐掉所释放的能量,问给定的n个原子反应最多能产生多少能量。题解:dp[sta]:=第i位为1表示第i个原子被和谐了,所得到的最大能量 则最后的答案就是原创 2017-04-21 21:45:57 · 407 阅读 · 0 评论 -
POJ 2288 Islands and Bridges 状压DP
题目链接:https://vjudge.net/contest/159644#problem/E题意:有n个点,每个点都有一个价值,无论从哪个点走,要求每个点只能走一次【哈密顿通路】,求出怎么走使得到的价值最大,且求出最大价值的路有多少条。假设有4个点,它的最大走法是1–>4–>2–>3,且1,4,2三点可以形成三角形,4,2,3也可以形成三角形,那么最大价值为:v[1]+v[4]+v[2]+v[3原创 2017-04-21 21:40:25 · 387 阅读 · 0 评论 -
POJ 3311 Hie with the Pie Floyd+状压dp
题目链接:https://vjudge.net/contest/159644#problem/C题意:有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短 题解:TSP问题: 挑战上面P193 首先floyd求出两点之间的最短路 然后状压, 对于状态S,第i位为1表示已经走过 dp[S][v]:=当前状态为S,在v这个点上,访问剩余没有访问的所有点(S原创 2017-04-21 21:04:03 · 318 阅读 · 0 评论 -
poj1185 炮兵阵地 状压dp
题目链接:https://vjudge.net/contest/159644#problem/B题意:在一个N*M的矩阵上布置炮兵部队,只有平原可以布置,然后每个炮兵部队都有一个攻击范围,它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。 问最多可以安排几个炮兵题解:http://www.cnblogs.com/buptLizer/archive/2012/08/23/2651881.htm原创 2017-04-21 20:43:03 · 289 阅读 · 0 评论 -
poj 3254 Corn Fields 状压dp
题目链接:https://vjudge.net/contest/159644#problem/A题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法。题解:http://blog.youkuaiyun.com/y990041769/article/details/24658419 状压dp dp[i][j]:=考虑到第i行,状态为原创 2017-04-21 20:28:48 · 266 阅读 · 0 评论 -
紫书动规 例题9-13 UVA - 1220 Party at Hali-Bula 树形dp
题目链接:https://vjudge.net/problem/UVA-1220题意:题解:树形dp: 树的最大独立集问题 d[u][0]:=不选u能得到的最大人数 d[u][0]=sum{max(d[v][0],d[v][1]} d[u][1]:=选u能得到的最大人数 d[u][1]=sum{d[v][0]} 判断唯一性就是看当前点的孩子是不是不唯一的。初始唯一代码:#includ原创 2017-03-17 00:00:30 · 300 阅读 · 0 评论 -
紫书动规 例题9-12 UVA - 12186 Another Crisis 树形dp
题目链接:https://vjudge.net/problem/UVA-12186题意:题解:d[u]:=让u给上级发信最少需要多少工人。假设u有k个节点,则至少c=(kT-1)/100+1个直接下属发信才行。 把所有子节点的d值从小到大排序,取前c个加起来就是当前的答案。代码:#include <bits/stdc++.h>using namespace std;typedef long lo原创 2017-03-16 22:32:54 · 372 阅读 · 0 评论 -
紫书动规 P282的问题 hdu2196 树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196题意:题解:http://blog.youkuaiyun.com/shuangde800/article/details/9732825 f[i][0],表示顶点为i的子树的,距顶点i的最长距离 f[i][1],表示Tree(i的父节点)-Tree(i)的最长距离+i跟i的父节点距离要求所有的f[i][0]原创 2017-03-16 21:34:58 · 246 阅读 · 0 评论 -
紫书动规 例题9-10 UVA - 1626 Brackets sequence 区间dp
题目链接:https://vjudge.net/problem/UVA-1626题意:题解:dp[i][j]:= i~j需要最少的括号 区间dp: dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]); (i<=k代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#de原创 2017-03-16 19:24:48 · 265 阅读 · 0 评论 -
紫书动规 例题9-9 UVA - 10003 Cutting Sticks 区间dp
题目链接:https://vjudge.net/problem/UVA-10003题意:题解:dp[i][j]:=切割小木棍i~j的最优费用,枚举中间切割点,这段的费用是该段的长度 d[i][j] = min(d[i][j],dp(i,k)+dp(k,j)+a[j]-a[i]);代码:#include <bits/stdc++.h>using namespace std;typedef lon原创 2017-03-16 18:14:54 · 215 阅读 · 0 评论 -
紫书动规 例题9-8 UVA - 1625 Color Length dp
题目链接:https://vjudge.net/problem/UVA-1625题意:题解:蒟蒻感觉非常难 dp[i][]j] := 第一个串拿i个,第二个串拿j个的最小值 维护一个w[i][j] blablabla 看紫书吧 http://www.cnblogs.com/candy99/p/5985217.html代码:#include <bits/stdc++.h>using nam原创 2017-03-15 22:57:04 · 239 阅读 · 0 评论 -
紫书动规 例题9-7 UVA - 11584 Partitioning by Palindromes dp
题目链接:https://vjudge.net/problem/UVA-11584题意:题解:dp[i]:=考虑到第i个字符,的最少划分 dp[i] = min{dp[j]+1} (0<=j代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a)原创 2017-03-15 16:14:26 · 301 阅读 · 0 评论 -
紫书动规 例题9-6 UVA - 11400 Lighting System Design dp
题目链接:https://vjudge.net/problem/UVA-11400题意:题解:按照电压从小到大排序,一种灯泡要么不换,要么全换; 否则依旧是两个电源,没省钱。 因为可能电压高的费用小,肯定全换,并且还可以剩下一个电源费用 还可能电压高的费用大,那也要全换,跑一跑,取最小值,因为可能电源费用省的更多那。dp[i]:=前i个的最小费用 dp[i] = min(dp[i],dp[j]原创 2017-03-15 15:56:49 · 309 阅读 · 0 评论 -
bzoj4247 挂饰 背包DP
点击打开链接思路:背包问题,dp[i][j]表示在考虑第i个物品的时候,还剩下j个挂钩注意,要按照挂钩多少排序,如果不排序的话,挂钩有可能会变成负数,然后又被加成正数代码抄自:http://blog.youkuaiyun.com/creationaugust/article/details/48133509 这个初始化 和 这个转换: 把一开始读入体积为0的物品的原创 2017-02-23 17:42:29 · 268 阅读 · 0 评论 -
喵哈哈村的魔法考试 Round #1 (Div.2) C 喵哈哈村的魔法石(II) 背包dp
点击打开链接思路:dp[j][k]表示能量用了j的人之精华,k的地之精华的最小花费。转移:dp[j][k] = min(dp[j][k],dp[j-a[i]][k-b[i]]+c[i]);注意,这是一个01背包,所以你得倒着枚举这个状态,以保证状态不会覆盖。(或者你直接三维状态表示也可以。)代码:#include using namespace s原创 2017-02-23 16:21:49 · 244 阅读 · 0 评论 -
Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 括号序列 dp+栈
点击打开链接题意:给你一个括号序列,让你找到最长的连续的合法括号序列然后让你输出这个括号序列的长度是多少这么长的括号序列一共有多少个思路:看到括号匹配,就用stack来弄就好了然后我们dp一下,表示以这个字符结尾的序列的长度是多少代码://http://codeforces.com/problemset/p原创 2017-02-21 21:40:24 · 331 阅读 · 0 评论 -
hdu 4597 Play Game 区间dp
点击打开链接题意:有两排数,AB依次拿,每次只能从第一/二排最左边和最右边拿问你A拿的和是多少,假设两个人都是很聪明的思路:http://blog.youkuaiyun.com/shuangde800/article/details/10277697出现聪明这个词的时候,这种题不是博弈论就是dp吧dp[x][y][i][j]表示当前玩家从a堆的x原创 2017-02-20 19:55:33 · 443 阅读 · 0 评论 -
cdoj 31 饭卡(card) 01背包
点击打开链接思路:01背包,跑容量为m-5,物品为n-1件的01背包。贪心:用剩下的5元买最贵的转移:dp[i][j] = max(dp[i-1][j],dp[i-1][j-c[i]]+c[i]代码:#include using namespace std;const int maxn = 1e3+10;int c[maxn],dp[50005];in原创 2017-02-20 19:13:16 · 569 阅读 · 0 评论 -
hdu5256 序列变换 dp LIS
点击打开链接思路:lis的变形,唯一不同的是条件a[i] - i > a[j] - j + 1,i>j。因为要确保这两个元素之间能插入i - j + 1个元素每个数先减去它的下标,防止下面的情况发生:加入序列是1,2,2,2,3,这样求上升子序列是3,也就是要修改2个,但是中间的两个2,变化范围又不能超过(1,3)那么这样求的也就不对,但是减掉之后,相当于给中间重复的数留下了修原创 2017-02-20 18:46:41 · 214 阅读 · 0 评论