动态规划
T_world
所有的成功都与坚持有关https://tangworld.github.io
展开
-
杭电ACM1114(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 题目大意:有一个存钱罐,给出它的重量和装满硬币的重量,然后给出里面装的硬币的种类数,并给出每种硬币的面值和重量,求在给定重量的条件下硬币的最小价值。 解题思路:完全背包。根据《背包九讲》,这道题目相当于要求必须装满给出的重量,因此要使dp[0]=0,同时因为求的是最小值,因此其他位置应该是正无原创 2015-11-09 20:35:53 · 1735 阅读 · 0 评论 -
4月16日东北大学校赛重现赛G题(经典问题)
题目大意:输入一个t,代表测试组数,然后输入t行,每行两个字符串,求每行中两个字符串的最大公共子序列。解题思路:正如题目所说,这是一道经典的求两个字符串最大公共子序列的问题。AC代码:#include #include using namespace std;int t;int n,m;int maxvalue;int c[5005][5005];char a[5005]原创 2016-04-16 17:27:41 · 755 阅读 · 0 评论 -
杭电ACM1248(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1248题目大意:中文题目解题思路:简单的完全背包问题。AC代码:#include #include using namespace std;int main(){ int T; int n; int price[]={150,200,350}; int dp[10005]原创 2015-11-23 21:52:27 · 943 阅读 · 0 评论 -
杭电ACM2546(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546题目大意:中文题目解题思路:题目说当余额大于等于5的时候可以买任意贵的菜,因此每次应该先留出5元,用它来买最贵的菜,剩下的钱就是背包的总容量了,利用01背包解决。AC代码:#include #include #include using namespace std;int原创 2015-11-23 14:24:59 · 1072 阅读 · 0 评论 -
杭电ACM3466(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466题目大意:给定N件物品,手里有M元钱,每一件物品都有价格,并且有相应的价值,但有一个要求就是手里的钱要大于等于qi才能买,求能得到的最大价值。解题思路:将所有物品按照q-p排序,之后按照01背包解决。AC代码:#include #include using namespace原创 2015-11-23 15:12:32 · 563 阅读 · 0 评论 -
杭电ACM2084
一道经典的动态规划入门题目。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目大意:如图所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,求经过的结点的数字之和的最大值。 解题思路:利用动态规划算法解决的话,应该是从数塔的最底层开始更新状态数组。从倒数第二层塔开始,比较每个位置上的数字与左下方的数字相加更大还是与右下方的原创 2015-10-30 13:53:46 · 2195 阅读 · 0 评论 -
杭电ACM5543(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题目大意:给一根长度为l的木棒,在木棒上放小棍子,每一根小棍子都有自己的长度和价值,要求保证小棍子的中心一定在木棒上(即可以伸出木棒一半的长度),最后求小棍子的最大价值和。 解题思路:01背包。但不同的是要考虑有几根小棍子悬在木棒的边上,有三种情况:0根、1根、2根,为了防止除以2之后出现小数原创 2015-11-15 15:35:59 · 445 阅读 · 0 评论 -
杭电ACM1159
又是一道非常经典的动态规划问题:最长公共子序列。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题目大意:给出两个字符串,求出最长公共子序列的长度。 解题思路:本题求给出的两个字符串的最大公共子序列。首先要区分公共子字符串和公共子序列,公共子字符串要求选出的字符串必须在原字符串中是相邻的,而子序列只要满足原字符串的先后顺序即可。原创 2015-10-30 14:03:01 · 2401 阅读 · 0 评论 -
杭电ACM1712(分组背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 题目大意:ACboy这个学期有N门课程要上,他计划在课程上花费M天,在每门课程上花费的天数不同,则该课程带来的收获也不同(花费天数越多收获越大),要求求ACboy的最大收获。 解题思路:分组背包。 AC代码:#include <iostream>#include <string.h>us原创 2015-11-15 15:45:14 · 615 阅读 · 0 评论 -
杭电ACM2191(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 题目大意:中文题目。愿逝者安息,愿世界上多一些美好,少一些灾难。 解题思路:根据《背包九讲》的讲解,多重背包可以拆成每一个都是01背包。 AC代码:#include <iostream>#include <string.h>using namespace std;int main()原创 2015-11-15 16:40:56 · 1003 阅读 · 0 评论 -
杭电ACM2159(二维背包)
本周的训练内容是动态规划,主要是背包问题。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 题目大意:中文题目,就不说大意了……………… 解题思路:对于这道题来说,背包中放的是经验,因此用耐力和杀怪的数量作为标准,当所得经验已经足够升级的时候就跳出循环。 AC代码:#include <iostream>#include <string原创 2015-11-11 15:17:01 · 1036 阅读 · 0 评论 -
HDU1423(最长上升公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1423题目大意:给定两个数字序列,求出二者中一个最长的公共子序列,并且要求这个子序列是递增的。解题思路:比这个问题更简单的问题是求两个序列的最长公共子序列,然后本题在此基础上加上递增的限制条件。很容易想到,是否可以在最长公共子序列的基础上通过修改来解决本问题呢?可以的。在最基础的求两序列原创 2016-08-11 09:04:14 · 1188 阅读 · 1 评论