DP
sunrainchy
这个作者很懒,什么都没留下…
展开
-
HDU 1559 最大子矩阵(DP)
最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2249 Accepted Submission(s): 1139 Problem Description 给你一个m×n的整数矩阵,在上面找一原创 2013-07-15 19:03:09 · 891 阅读 · 0 评论 -
POJ Strategic game(树形DP)
题目链接:http://poj.org/problem?id=1463 其实这个题目也是比较水的一个树状DP,和上面一篇博客思路基本上差不多,甚至动态方程都差不多 开始建立树的时候,直接建立树,建树的时候直接让大的成为小的子树,由于题目说了这是一棵树,所以 就不用担心直接建树就好了,最后从0(根)号节点DFS即可! 每个子树的根节点可有两个状态,要么安排士兵要么不安排,如果安排,那么子节点原创 2013-09-19 22:43:04 · 720 阅读 · 0 评论 -
HDU Starship Troopers(树形DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 这个题目是在树形DP的基础上在每个节点的一个分组背包问题 首先根据题目条件建立一颗树,然后DFS整棵树,每个节点的dp[i] 表示以这个节点为根,放i个士兵最多能得到brains的个数! 对每个非叶节点进行一次分组背包,最后输出根节点的dp[m] #include #includ原创 2013-09-20 13:23:13 · 797 阅读 · 0 评论 -
HDU 4341 Gold miner(DP 分组背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4341 明显的分组背包问题,由于排序考虑不周全导致wa数次 分组按照共线的分组!每组只能选择一个! #include #include #include #include #include using namespace std; #define eps 1e-10 #def原创 2013-09-20 16:11:14 · 728 阅读 · 0 评论 -
HDU 1712 ACboy needs your help(DP 分组背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 比较裸的分组背包问题 没一个作业只能做一次,按照做的天数分为一组,然后对每一种作业进行分组背包 #include #include #include #include using namespace std; #define MAX(a,b) (a>b?a:b) #de原创 2013-09-20 16:53:13 · 634 阅读 · 0 评论 -
POJ 2479 Maximum sum(DP)
题目链接:http://poj.org/problem?id=2479 应该是很水的一个DP,最大子段和,正方向求一次,反方向求一次,处理当前位置之前的最大值 枚举每一个位置获得最大值! #include #include #include #include using namespace std; #define maxn 60000 #define MAX(a,b) (a>b原创 2013-09-20 19:32:01 · 648 阅读 · 0 评论 -
HDU 2955 Robberies(0-1 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 这个题目简单也不简单,谁都能看出来是0-1背包问题,但是怎么背包法还是要想想的 开始想直接方法概率,用普通背包做,但是小了wa大了TLE 最后想到反着来,因为银行里面的钱是整数,而且钱有限,所以呢 可以把钱作为代价来dp dp[i]表示抢i钱最大生还的希望,dp[0]=1其他的初始化为原创 2013-09-23 11:09:58 · 627 阅读 · 0 评论 -
POJ 3356 AGTC(最短编辑距离 DP)
题目链接:http://poj.org/problem?id=3356 也是DP中比较经典的问题 dp[i][j]表示第一个串到i位置,和第二个串到j位置的最短编辑距离 dp[i][j] 如果s1[i]==s2[j] dp[i][j]=MIN(dp[i-1][j-1],dp[i-1][j]+1,dp[i][j-1]); 否则dp[i][j]=MIN(dp[i-1][j-1]+1,dp[原创 2013-09-25 11:05:07 · 833 阅读 · 0 评论 -
HDU 4323 Magic Number(编辑距离 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4323 经典的编辑距离DP,进行一些必要的剪枝,也就是初始长度差大于small的话 直接continue; #include #include #include #include using namespace std; #define maxn 1500 #define MIN(a,原创 2013-09-25 13:40:20 · 642 阅读 · 0 评论 -
POJ 1837 Balance(DP)
题目链接:http://poj.org/problem?id=1837 这个题目纠结好长时间 dp[i][j]的意思是在挂第i个重物时力矩成积为j的最大种数目 这个题目比较有意思的是负值,采取的办法是加上一个可能的最大 偏移值,保证在所有情况下都是正的 开始设置dp[0][Min]=1也就是Min这个位置就是平衡的位置 每一个状态一定是从有意义的状态转移过去,也就是转移前的位置 一定原创 2013-09-27 20:56:36 · 571 阅读 · 0 评论 -
UVA 10003 - Cutting Sticks(区间DP)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=944 题目DP还是比较明显的,也比较简单,第一眼看题以为是贪心 dp[i][j]表示从第i个切割点到第j个切割点(注意开始时把0和length作为切割点加入) dp[i][j]=MIN(dp[原创 2013-10-14 10:09:31 · 590 阅读 · 0 评论 -
HDU 1520 Anniversary party(树形DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 这个应该算是树形DP入门级的题目了,比较简单,每个节点设置两个值,一个是my是选择自己时的rank值最大,一个是other 表示不选择自己时的rank最大,然后从叶子节点开始DP(从根递归实现),最后输出根节点my 和 other中较大的一个 #include #in原创 2013-09-18 20:50:42 · 631 阅读 · 0 评论 -
HDU 3535 AreYouBusy(混合背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 这个题目本来是不难的,但是众多背包问题混合到一起就感觉不好做了,如果分开那么都会做 想解这个问题一定要理解各种类型的背包问题才行! s=0这个是一个每组至少选一个的背包,首先这组初始化为-1,最后从上一个和本数组不为-1的位置选,如果某个位置为-1,那么说明这个位置对于前面 背包分组的要原创 2013-09-18 12:59:55 · 713 阅读 · 0 评论 -
POJ 3368 Frequent values(RMQ 区间出现频率最多数字次数)
题目链接:http://poj.org/problem?id=3368 题意:给定n个升序数组,然后输入查询区间,要求输出这个区间内相同数字的最大个数 解题思路:RMQ算法 其实这个题目想到怎么用RMQ算法就基本上搞定了,如果想不到那么就要费事一点了 其实这个题目难点在于输入的查询区间不固定,有可能一串相连的的相同数字的被查询区间分割开了 那么这样就比较麻烦了,处理起来也比较费事,可是稍原创 2013-07-31 10:05:19 · 1123 阅读 · 0 评论 -
HDU 4639 Hehe(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4639 这个题目拿到手一看,字符串,以为又要用什么后缀数组呢,原来不是 首先这个题目是“hehe”,可以替换也可以不替换,那么关键问题就是这个出现重复hehe的问题 这个题目把所有不同的也就是不连在一起的hehe串分开,计算每个能替换的数目,然后相乘法就行了 这里有个简单的DP :dp[i]=d原创 2013-08-01 19:17:31 · 714 阅读 · 0 评论 -
HDU 1160 FatMouse's Speed(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 这个是一个很水的DP 了,复杂度O(n^2)的 首先先按照weight排序下,然后开始DP dp方程很简单:dp[i]=MAX(dp[j]+1]) (j>0 && j po[j].weight) #include #include #include #inclu原创 2013-08-12 21:15:59 · 549 阅读 · 0 评论 -
HDU 1074 Doing Homework(状态DP)
题目链接:点击打开链接 这个是一道比较简单的状态DP,数据量15,所以基本上不用怀疑这是一个状态DP问题了 对于这个题目其实还是能体现状态DP的不少精髓的 首先是位运算,判断当前状态可以由那些状态转移得到,运用与运算在遍历的时候判断 还有的就是路径记录 这片代码: i=(i & (~(1 当前状态是由dp[i].val转换过来的,那么这个状态由什么作业转换过来就用上面的代码就搞原创 2013-08-13 11:07:42 · 573 阅读 · 0 评论 -
HDU 4681 String(DP 最长公共子系列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 很多人都说这题比较简单,但是如果想不到方法还是不好做的,想到后基本上就等着AC了 首先要会最长公共子系列的含义,这里假设所有字符数组下标都是从1开始 第一步求串a和串b的正向最长公共子系列 dp_a[i][j]的含义是串a长度为i的前缀和串b长度为j的前缀的最长公共子系列的长度(串原创 2013-08-16 13:13:06 · 645 阅读 · 0 评论 -
POJ 1159 Palindrome(DP)
题目链接:http://poj.org/problem?id=1159 这个题目算是一个简单基础的DP了,但是我还是想了一会 dp方程dp[i][j]的意思是,下标从i到j的字串,如果变成回文串最少要加多少个字符 首先当i==j的时候肯定是0,因为一个字符肯定就是回文,当i+1=j的时候,如果str[i]==str[j]那么dp[i][j]=0否则dp[i][j]=1 这两个步骤完原创 2013-08-16 15:00:45 · 613 阅读 · 0 评论 -
UVA 12589 Learning Vector(DP)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4034 开始思路是首先按照斜率排序,斜率大的在前面,然后开始去除边,每次选取面积减少最小的边进行删除,很快写出代码,果然没经过证明的贪心果然不对 后来看了解题报告说是DP,然后就硬想了DP解法,原创 2013-09-30 19:37:54 · 829 阅读 · 0 评论 -
HDU 4753 Two Rabbits(区间DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4745 这个题目比赛时没出,对不起队友! 其实就是求最长回文子系列,最后枚举一个兔子的出发点就可以了,另一个兔子在左边的回文子系列的中心 接下来就是求回文子系列的长度dp[i][j]表示串从i到j的最长回文字系列的长度 #include #include #include #inclu原创 2013-09-16 12:15:32 · 993 阅读 · 2 评论 -
POJ 3260 The Fewest Coins(0-1背包 多重背包)
题目链接:http://poj.org/problem?id=3260 这个题目其实背包部分并不是难点,难点是怎样把背包用在这个问题上,好题 change[i]表示找钱i用的最少的钱币 money[i]表示支付i用的最少钱币 最后枚举下change[i]+money[i-t]最小的就是答案 #include #include #include #include using n原创 2013-09-16 21:33:44 · 731 阅读 · 0 评论 -
HDU 3033 I love sneakers!(DP 背包 每组最小取一个的背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3033 这个题目其实背包很容易看出来,关键是每组至少取一个不怎么好处理 代码中这句就是保证了这个限制,如果是-1的话,说明前面肯定有某个 分组里面一个没取,我们向下来的就要找前面每个分组都取了的最优值 if(dp[i][r-v[i][j]]!=-1) #include #in原创 2013-09-18 10:45:36 · 1105 阅读 · 0 评论 -
HDU 2844 Coins(DP 背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 求背包能装满的情况的条数,参见背包九讲,二进制优化完全背包和多重背包问题 #include #include #include #include using namespace std; const int maxn = 100100; int dp[maxn]; int n,m,v原创 2013-12-13 13:26:53 · 531 阅读 · 0 评论