
动态规划
jchalex
善待人,严做事,无节操
展开
-
Uva - 10635 - Prince and Princess(LCS转LIS)
题意:一个n*n的棋盘(2 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=18&problem=1576——>>把第一个序列重新编号为:1, 2, 3, ...则第二个序列相应地就成了求LIS。#include #includ原创 2013-04-15 13:27:30 · 1239 阅读 · 0 评论 -
URAL - 1741 - Communication Fiend(dp)
题意:一个系统,目前是正版的,版本为1,现要下一些更新包来更新版本,更新包一定要接连的,若装了一个1——>3,那么下一次一定要装3——>xx的,Licensed的正版更新包只能装在正版系统上,不改变原系统的版权;Pirated的盗版更新包可以装在任何系统上,但装了后系统就变成盗版的了,而且再也回不到正版系统了;Cracked的正版更新包可以装在任何系统上,不改变原系统的版权。问能否从版本1更新到版原创 2013-08-31 23:58:41 · 1114 阅读 · 0 评论 -
poj - 4045 - Power Station(树形dp)
题意:一棵有n个结点的树,要取其中的一个结点,使得该结点到其他所有结点的距离和dis最小,即损耗I * I * R * dis最小,输出最小损耗和该结点(有多个的话按结点编号从小到大输出)(3 题目链接:http://poj.org/problem?id=4045——>>怒刷树状dp。。。设cnt[i]为以i为根的子树的结点数,d[i]为以i为根的子树中所有结点到i的距离和,一次dfs原创 2013-08-20 00:00:29 · 1121 阅读 · 0 评论 -
hdu - 4628 - Pieces(状态压缩dp)
题意:给出一个长度不超过16的字符串s,问最少删除多少次其中的回文串能把整个s删得干干净净(回文串可跨字母组成),共T组测试数据(T 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628——>>集合上的动态规划。。。和点集配对很像,这里我先求出所有的回文串,然后dp。设d[S]表示将集合S中的字母删除需要多少步,结果就是d[(1枚举原创 2013-07-30 23:36:51 · 2100 阅读 · 3 评论 -
poj - 2411 - Mondriaan's Dream(轮廓线dp)
题意:用1 x 2的矩形铺w * h的矩形,有多少种铺法。(1 题目链接: http://poj.org/problem?id=2411——>>轮廊线dp。#include #include #include using namespace std;const int maxn = 12;int h, w, cur;long long d[2][1<<maxn];原创 2013-05-07 12:07:19 · 923 阅读 · 0 评论 -
Uva - 11825 - Hackers' Crackdown(状态压缩dp)
题意:全集为0, 1, 2, ..., N-1,输入N个子集,求这N个子集最多能分成多少组,使得每组的并集都是全集。题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=226&page=show_problem&problem=2925——>>设f[S]为集合S的最大拆分组数。原创 2013-04-15 20:11:16 · 1447 阅读 · 0 评论 -
sgu - 518 - Kidnapping(set + dp)
题意:n个点,给出这n个点的邻接矩阵,元素大小为对应边的长度,然后给出k个长度,问从结点1开始,依次走完这k个长度后最终到达的结点有哪几个(2 题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=518——>>看n、k为200,不大,于是直接模拟一次,结果TLE去了。。。接着想到了dp,设d[i]为依次走完前i个长度时能到达的点的集原创 2013-08-13 00:22:38 · 1168 阅读 · 0 评论 -
rqnoj - 167 - Show Problem(LIS)
题意:求最长递减子序列的长度。题目链接:http://www.rqnoj.cn/Problem_167.html——>>LIS,因为习惯了递增这个方向,于是在输入时从后往前输入,求最长递增子序列。最坑的地方:一、当N == 0时要特判;二、当递减子序列最后出现0时,不考虑这些0;(这个坑子坑了我好久……)#include #include using namespace原创 2013-05-06 21:21:39 · 1028 阅读 · 0 评论 -
LA - 3882 - And Then There Was One(dp)
题意:1到n顺时针排列,第一次拿掉m,接着拿顺时针方向的第k个……一直到只剩一个数为止,问最后剩下的数是?(2n10000, 1k10000, 1mn)题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1883——>>原创 2013-04-16 12:21:53 · 1467 阅读 · 0 评论 -
LA - 4794 - Sharing Chocolate(状态压缩dp)
题意:能否把一块面积为x*y的巧克力分成面积分别为a1, a2, a3, ..., an的小块巧克力。题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2795——>>集合上的动态规划~~好喜欢~~设d[S][x]为把面积为x原创 2013-04-16 21:42:34 · 1539 阅读 · 0 评论 -
poj - 1458 - Common Subsequence(LCS)
题意:求两个字符串的最长公共子序列的长度。题目链接:http://poj.org/problem?id=1458——>>LCS原创 2014-09-30 11:53:48 · 654 阅读 · 0 评论 -
poj - 1170 - Shopping Offers(状态压缩dp)
题意:b(0 题目链接:http://poj.org/problem?id=1170——>>已有b种物品,再将每种优惠分别看成一种新物品,剩下就是完全背包问题了。。设dp[i]表示购买状态为 i 时的最少花费(关于购买状态:00032表示第0种物品买2个,第1种物品买3个),则状态转移方程为:dp[i + product[j].nState] = min(dp[i + produc原创 2014-09-30 20:11:01 · 1683 阅读 · 0 评论 -
poj - 1579 - Function Run Fun(记忆化搜索)
题意:跟着题目中公式走。题目链接:原创 2014-09-30 11:35:14 · 754 阅读 · 0 评论 -
hdu - 4649 - Professor Tian(概率dp)
题意:一个数学表达式,n+1个操作数,n个操作符(&, |, ^),每个操作符及其后面的那个操作数有一个消失的概率,问表达式的期望(操作数 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4649——>>操作数的范围 设a[i][j]表示第i个数的第j个二进制位;p[i][j]表示对于二进制位的第bit位,前i个数运算后得到j的概率(j为0原创 2013-08-07 11:09:30 · 966 阅读 · 0 评论 -
sgu - 269 - Rooks(大数dp)
题意:给出一个n行的棋盘,每行的长度任意,问在该棋盘中放k个车(不能同行或者同列)有多少种放法(n 题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=269——>>开始的时候冒险用dfs去做,结果TLE了。。。改dp,大数长度开小点WA,开大点MLE……最后改用滚动数组开1000位的大数长度才A掉……设d[i][j]表示前i行放j原创 2013-08-04 09:58:38 · 1521 阅读 · 0 评论 -
hdu - 4705 - Y(树型dp)
题意:给出一棵有N个结点的树,问在这棵树中找3点使得这3个之间不存在简单路径的方法有多少种(3 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4705——>>一大段时间误解了题意,WA和RE一片。。。简单路径:指这3个点之间的欧拉通路(走完这3个点而不走回头路)。在队友的启发下,用了反向求解:求出这棵树中找3个结点使之存在简单路径的方原创 2013-08-22 18:47:52 · 1341 阅读 · 0 评论 -
fzu - 2129 - 子序列个数(dp)
题意:有n个整数的一个序列,问其子不同的子序列有多少个(1 题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129——>>设d[i]表示前i个元素的子序列个数,则状态转移方程为:第i个元素a未出现过:d[i] = (2 * d[i-1] + 1) % mod;第i个元素a出现过:d[i] = (2 * d[i-1] - d[p[a]-1])原创 2013-08-05 18:29:28 · 1920 阅读 · 0 评论 -
hdu - 4632 - Palindrome subsequence(dp)
题意:求一个给定字符串的回文子串个数(字符串长度 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4632——>>设d[i][j]表示区间[i, j]内的回文子串个数,状态转移方程:d[i][j] = (d[i+1][j] + d[i][j-1] - d[i+1][j-1]) % mod;如果两端字符相同,则加上以两端字符为两端的回文子原创 2013-08-02 08:59:41 · 1055 阅读 · 0 评论 -
poj - 2533 - Longest Ordered Subsequence(LIS)
题意:求最长递增子序列。题目链接:http://poj.org/problem?id=2533——>>……woj - 1398 - Stock Exchange题目链接:http://acm.whu.edu.cn/land/problem/detail?problem_id=1398——>>两道题题意一样,不过这里的数量大了10倍,开始没改maxn,结果竟然是TLE,开原创 2013-05-06 01:28:28 · 999 阅读 · 0 评论 -
hdu - 4972 - A simple dynamic programming problem(数学 + dp)
题意:NBA比赛,双方共N次进球(N题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4972——>>知道最后的比分差k,怎么求得比分呢?设分数较低的一方的最后分数为x,则另一方的最后分数为x + k,设双方最后总分和为S,则x = (S - k) / 2,可得双方的比分。。所以,只要知道最后双方的总分和,就可以确定双方比分。。于是,问题转化成原创 2014-10-28 11:16:41 · 1008 阅读 · 0 评论 -
hdu - 2870 - Largest Submatrix(dp / 单调栈)
题意:一个由 a, b, c, w, x, y, z 组成的原创 2014-11-01 12:16:58 · 721 阅读 · 0 评论 -
poj - 1691 - Painting A Board(状态压缩dp)
题意:N(1 题目链接:http://poj.org/problem?id=1691——>>状态:dp[S][color] 表示达到状态 S 且最后一次涂色为 color 时的最小取画笔数状态转移方程:dp[S][color] = min(dp[S][color], dp[sub][i]); 或者 dp[S][color] = min(dp[S][color], dp[sub][i]原创 2014-11-21 14:12:51 · 979 阅读 · 0 评论 -
poj - 2836 - Rectangular Covering(状态压缩dp)
题意:平面上有 n (2 ≤ n ≤ 15) 个点,现用平行于坐标轴的矩形去覆盖所有点,每个矩形至少盖两个点,矩形面积不可为0,求这些矩形的最小面积。题目链接:http://poj.org/problem?id=2836——>>因为每个矩形至少要盖两个点,所以,枚举所有的两点组合。。状态:dp[S] 表示将集合 S 中的所有点覆盖的最小矩形面积状态转移方程:dp[news] = m原创 2014-11-21 17:24:20 · 1920 阅读 · 0 评论 -
poj - 1651 - Multiplication Puzzle(dp)
题意:n个数(3 题目链接:http://poj.org/problem?id=1651——>>状态:dp[i][j]表示第i个数到第j个数组成的序列的最小权值和。状态转移方程:dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + a[i] * a[k] * a[j]);(枚举最后一个拿掉的数来更新)时间复杂度:O(n ^ 3)#incl原创 2014-10-21 10:40:52 · 1028 阅读 · 0 评论 -
poj - 1160 - Post Office(dp)
题意:一条直路上有V个村庄(1 题目链接:http://poj.org/problem?id=1160——>>状态:dp[i][j]表示前i个村庄建j个邮局的最短距离和。状态转移方程:dp[i][j] = min(dp[i][j], dp[k][j - 1] + nDis[k + 1][i]);(前k个村庄由前j - 1个邮局管,后面的村庄归最后一个邮局管)状态:nDis[i]原创 2014-10-21 16:34:55 · 2124 阅读 · 0 评论 -
poj - 1159 - Palindrome(滚动数组dp)
题意:一个长为N的字符串( 3 题目链接:http://poj.org/problem?id=1159——>>状态:dp[i][j]表示第i个字符到第j个字符组成的字符串变成回文串的最少插入次数。状态转移方程:若sz[i] == sz[j],则:dp[i][j] = dp[i + 1][j - 1];否则:dp[i][j] = min(dp[i + 1][j], dp[i][j原创 2014-10-21 20:27:13 · 1201 阅读 · 0 评论 -
poj - 1837 - Balance(dp)
题意:一个天平,现要在其中的C(2 题目链接:http://poj.org/problem?id=1837——>>状态:dp[i][j] 表示使用前 i 个砝码达到力矩和为 j 时的方案数。。状态转移方程:dp[i][j] += dp[i - 1][j - w[i] * x[k]]。。时间复杂度:O(C^2 * G^2)。。#include #include const原创 2015-05-11 16:45:50 · 687 阅读 · 0 评论 -
poj - 1276 - Cash Machine(dp)
题意:N(0 题目链接:http://poj.org/problem?id=1276——>>多重背包。。卡了一下内存。。所以,用滚动数组。。#include const int MAXN = 200;const int MAXC = 100000;int cash;int N;int ret;int D[MAXN];int cnt;int dp[MAXC + 1原创 2015-05-11 17:53:23 · 881 阅读 · 0 评论 -
hdu - 1506 - Largest Rectangle in a Histogram(dp / 单调栈)
题意:求一个长为n直方图的最大子矩形的面积。原创 2014-11-01 08:46:21 · 975 阅读 · 0 评论 -
acd - 1216 - Beautiful People(二维LIS)
题意:一个人有两个属性S, B(1 ≤ Si, Bi ≤ 10^9),当两个人的这两个属性满足 S1 S2 && B1 > B2 时,这两个人不会讨厌对方。现给出 N 个人(2 ≤ N ≤ 100 000)的属性,求最多能有多少个人,他们之间任意两人都不会讨厌对方。题目链接:http://acdream.info/problem?pid=1216——>>容易想到是一个二维的LIS模型。。原创 2014-11-01 02:03:16 · 1653 阅读 · 0 评论 -
poj - 1163 - The Triangle(dp)
题意:给出一个三角阵,问从上到下,原创 2014-10-02 11:07:04 · 743 阅读 · 0 评论 -
Uva - 11270 - Tiling Dominoes(轮廓线dp)
题意:用1 x 2的块恰好填满m x n的矩形有多少种填法。(m*n 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33787——>>轮廓线dp。注意maxn不要太大,开始用15,结果TLE,改成11后AC。#include #include #include using namespace s原创 2013-05-07 11:54:31 · 1641 阅读 · 0 评论 -
Uva - 10859 - Placing Lampposts(树形dp)
题意:N个点,M条边,在一个点放一个灯可以照亮与这个点相邻的边。问照亮所有的路最少需要多少个灯,如果最小值有多种情况,取边同时被两个灯照亮的情况。(N 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1800——>>设灯数为x,只被一个灯照原创 2013-04-16 13:26:21 · 1216 阅读 · 0 评论 -
poj - 1157 - LITTLE SHOP OF FLOWERS(dp)
题意:F朵花(从左到右标号为1到F,1 ——>>设dp[i][j]表示将前j种花放入前i个花瓶的最大好看度和,则状态转移方程为:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] + nValue[j][i]);时间复杂度:O(F * V)#include #include using std::max;const int MA原创 2014-10-02 21:34:17 · 985 阅读 · 0 评论 -
poj - 1088 - 滑雪(dp)
题意:一个R * C的矩阵(1 题目链接:http://poj.org/problem?id=1088——>>设dp[i][j]表示从ij位置出发的最长路,则状态转移方程为:dp[x][y] = max(dp[x][y], Dp(nNewX, nNewY) + 1);时间复杂度:O(R * C)#include #include #include using std原创 2014-10-02 22:02:29 · 1664 阅读 · 0 评论 -
poj - 1050 - To the Max(dp)
题意:一个N * N的矩阵,求子矩阵的最大和(N 题目链接:http://poj.org/problem?id=1050——>>将二维压缩为一维,对一维进行dp求解。将二维压缩成一维:1、第1行2、第2行加第1行3、第3行加第2行加第1行……N、第N行加第N-1行加……加第1行1、第2行2、第3行加第2行……1、第N行对于一维情况,设dp[i]表原创 2014-10-03 15:36:40 · 1171 阅读 · 0 评论 -
poj - 1953 - World Cup Noise(dp)
题意:n位长的01序列(0 题目链接:http://poj.org/problem?id=1953——>>设dp[i][j]表示前 i 位中第 i 位为 j 时的序列数,则状态转移方程为:dp[i][0] = dp[i - 1][0] + dp[i - 1][1];dp[i][1] = dp[i - 1][0];因为对于相同的n,其结果是固定的,所以可以对一个n只计算一原创 2014-10-04 08:46:21 · 1463 阅读 · 0 评论 -
hdu - 1505 - City Game(dp / 单调栈)
题意:一个 M x N 矩阵,其中有些格子有障碍,求原创 2014-11-01 09:53:11 · 1315 阅读 · 0 评论 -
poj - 1631 - Bridging signals(LIS)
题意:两列数,每列p(p 题目链接:http://poj.org/problem?id=1631——>>求出输入序列的LIS,左边已是升序,所以LIS对应的左边序号也是升序,一一匹配后不会交叉,LIS的长度就是答案。因为p达40000个,O(n^2)的算法不能满足需要,应使用O(nlongn)以下的算法。。#include #include #include using std原创 2014-09-30 09:48:50 · 993 阅读 · 0 评论 -
hdu - 1028 - Ignatius and the Princess III(dp / 五边形数定理)
题意:把一个整数N(1 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028——>>经典题目呀,而且数据量不大。。。设d[i][j]表示把整数i拆分成不过超过j的正整数和有拆法数,则状态转移方程为:d[i][j] = d[i-j][ j] + d[i][ j-1];(大小细微处理一下)记忆化搜索:#include #inc原创 2013-08-07 13:16:33 · 1041 阅读 · 0 评论