------动态规划
文章平均质量分 95
_zhj
加油!
展开
-
HDU5945 Fxx and game
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5945题意:给3个数x, k, t。经一系列操作后,使x变为1,求最少的操作次数。具体操作为:每次x可以减去一个数0~t,或者除以k。解析:本题使用dp,但是需要用单调队列进行优化。动规需要从1开始,一直往上计算,直到x为止。递归公式为:dp[i]=min(min(dp[i-t]~dp[原创 2017-05-12 19:23:11 · 284 阅读 · 0 评论 -
最长公共子串(一步步优化)
文章参考摘自:链接(大牛写的很好,所以直接粘过来了)最长公共子串(Longest Common Substring)是一个非常经典的面试题目,在实际的程序中也有很高的实用价值,所以把该问题的解法总结在本文重。不过不单单只是写出该问题的基本解决代码而已,关键还是享受把学习算法一步步的优化,让时间和空间复杂度一步步的减少的惊喜。概览最长公共子串问题的基本表述为:转载 2017-08-19 10:35:30 · 662 阅读 · 0 评论 -
HDU 3392——DP
题意:有n个男生和m个女生,知道他们的身高。给他们配对,要求所有配对的身高差之和最小。数据范围:0 , |n – m| 解析:根据数据范围分析,10^4 * 100正好在合理时间之内。先给两个序列进行排序,用短的序列去匹配长的序列。设两个序列之差为len,那么短的序列可以与长序列中len+1个元素匹配取最优,记这个长度为跨度。用dp[i][j]表示短的那个序列去匹配长的序列,i表示原创 2018-01-23 15:27:16 · 237 阅读 · 0 评论 -
HDU2844Coins(多重背包)
关于多重背包,可以参考这篇文章,很详细http://blog.csdn.net/flyinghearts/article/details/5898183多重背包问题:有n种物品和容量为v的背包,第i件物品的容量为v[i],价值为w[i],数量为n[i]件。怎样装才能是背包容纳最大的价值。多重背包用单调队列优化的模板:#include #include const int N = 250005原创 2018-01-17 19:05:24 · 234 阅读 · 0 评论 -
HDU2993 MAX Average Problem DP+斜率优化
题意:给定一个数字序列,定义ave(i,j)为从i到j的数字的平均值,要求j-i+1>=k,求最大的平均值。解析:这个题可以转换一下,将sum[i]作为纵坐标的值,那么就是求相距大于k的两点之间的斜率的最大值。(参考这篇文章:)可以知道加点的时候维护一个下凸的曲线,每次找出该点和曲线的切线即在该点的最大斜率。求斜率的时候,根据下凸曲线的性质,可以删去已找到的切点之前的点。(吐槽一下:这题很原创 2018-01-26 10:35:18 · 211 阅读 · 0 评论 -
HDU 2686 Matrix多线程DP
题意:给定一个n*n的矩阵,每个格子中有一个数字,要求从最左上角走到最右下角(只能往下和往右走),再返回最左上角(只能往上或往左走),求经过的数字之和的最大值。要求来回不能重复某个格子。解析:由于矩阵大小为2,所以可以使用多线程dp来做。将来回两次变为一次同时两条路径来做。用dp[k][x1][y1][x2][y2]来表示到目前为止走了k步,且第一条路径到(x1, y1),第二条路径到了(x2原创 2018-01-26 19:12:47 · 213 阅读 · 0 评论 -
HDU1712(分组背包) HDU3496(二维背包)
引用背包九讲中的知识:分组背包:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。算法:这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设f[k][v]表示前k组物品花费费用v能取得的最大权值,则有:f[k]原创 2018-01-18 21:15:44 · 367 阅读 · 0 评论 -
HDU1069 Monkey and Banana ——dp
Monkey and BananaTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16077 Accepted Submission(s): 8537Problem DescriptionA group of researchers原创 2017-08-11 17:29:43 · 272 阅读 · 0 评论 -
HDU2859 Phalanx dp
PhalanxTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1982 Accepted Submission(s): 987Problem DescriptionToday is army day, but the service原创 2017-08-17 09:47:33 · 301 阅读 · 0 评论 -
TSP问题(动态规划求解)HDU5067
问题描述:有n个城市,从第一个城市出发,每个城市只能走一次,再回到第一个城市,求最小代价。思路:使用动态规划,dp[i][j],其中i是压缩的状态,表示第i个城市是否已经走过,j表示第j个城市。dp[i][j]表示状态是i且当前所在的城市是j时最小代价。转移方程:dp[i|(1<<k)][k] = min(dp[i|(1<<k)][k], dp[i][j]+di...原创 2019-04-16 10:28:07 · 804 阅读 · 0 评论 -
[leetcode 152]最大乘积子序列
leetcode 152思路:dp代码:class Solution {public: int maxProduct(vector<int>& nums) { int n = nums.size(); int ans = nums[0], Max = nums[0], Min = nums[0]; for(...原创 2019-08-20 09:36:23 · 162 阅读 · 0 评论 -
[leetcode 72]字符串编辑距离
题目连接:leetcode72题意:给两个字符串A和B,有三种操作,增加、删除或替换一个字符。求A变成B最小的操作次数。思路:使用动态规划。dp[i][j]表示将字符串A[0~i]变成字符串B[0~j]需要的操作数。1、如果A[i] = B[j],那么A和B都可以往后移一个,即dp[i][j] = dp[i-1][j-1]2、如果A[i] ≠ B[j],那么有三种操作可以做:...原创 2019-08-25 15:00:58 · 167 阅读 · 0 评论 -
[leetcode 905]有效排列
题目链接:leetcode905题意:给一个由'D'和'I'组成的字符数组,求0~n这n+1个数满足字符数组所有D和I规则的排列数目,D和I规则如下:D(decrease)代表a[i] > a[i+1];I(increase)代表a[i] < a[i+1].结果取余10^9+7题解:使用动态规划,dp[i][j] 代表当前长度为i并且末尾数字是j的符合规则的...原创 2019-09-09 22:20:34 · 795 阅读 · 0 评论 -
HDU 3366 Passage 概率dp
PassageTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 538 Accepted Submission(s): 269Problem DescriptionBill is a millionair原创 2017-08-23 16:20:31 · 452 阅读 · 0 评论 -
poj2432 Anniversary party 入门级树形dp
Anniversary partyTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9147 Accepted: 5262DescriptionThere is going to be a party to celebrate the 80-th Ann原创 2017-08-26 10:24:36 · 437 阅读 · 0 评论 -
HDU1864最大报销额 ——01背包
最大报销额Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 26342 Accepted Submission(s): 8104Problem Description现有一笔经费可以报销一定额度的发票。允原创 2017-08-09 15:53:52 · 238 阅读 · 0 评论 -
HDU1231 最大连续子序列——dp
最大连续子序列Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34161 Accepted Submission(s): 15472Problem Description给定K个整数的序列{ N1, N原创 2017-08-09 18:48:40 · 260 阅读 · 0 评论 -
整数划分——经典dp
题目:给两个整数n和k,分别计算一下情况的数目。(1 1、将n划分成若干正整数之和的划分数。2、将n划分成k个正整数之和的划分数。3、将n划分成最大数不超过k的划分数。4、将n划分成若干个奇正整数之和的划分数。5、将n划分成若干不同整数之和的划分数。一、将n划分成若干正整数之和的划分数。这种情况没说划分的整数不能相同,例如5 = 2+2+1,可以划分出两个2原创 2017-08-17 16:44:19 · 1047 阅读 · 0 评论 -
HDU1024 Max Sum Plus Plus ——dp
Max Sum Plus PlusTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30682 Accepted Submission(s): 10828Problem DescriptionNow I原创 2017-08-10 18:32:28 · 196 阅读 · 0 评论 -
POJ3666 Making the Grade 离散化+DP
Making the GradeTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 7729 Accepted: 3612DescriptionA straight dirt road connects two fields on FJ's farm, b原创 2017-08-18 18:57:25 · 287 阅读 · 0 评论 -
HDU1114 Piggy-Bank 完全背包
Piggy-BankTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 26748 Accepted Submission(s): 13524Problem DescriptionBefore ACM ca原创 2017-08-13 17:36:58 · 359 阅读 · 0 评论 -
HDU1074 Doing Homework 状态压缩dp
Doing HomeworkTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9867 Accepted Submission(s): 4718Problem DescriptionIgnatius ha原创 2017-08-13 10:27:51 · 282 阅读 · 0 评论 -
度度熊与邪恶大魔王——dp
度度熊与邪恶大魔王 Accepts: 2481 Submissions: 15467 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗原创 2017-08-06 10:25:54 · 399 阅读 · 0 评论 -
度度熊的午饭时光——01背包
度度熊的午饭时光 Accepts: 659 Submissions: 8046 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description度度熊最期待每天的午饭时光,因为早饭菜品清淡,晚饭减原创 2017-08-06 17:09:27 · 379 阅读 · 0 评论 -
HDU1176 免费馅饼 DP(两种方法)
免费馅饼Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 51831 Accepted Submission(s): 18147Problem Description都说天上不会掉馅饼,但有一天gameb原创 2017-08-14 10:50:11 · 280 阅读 · 0 评论 -
HDU1257 最少拦截系统 DP(最大递增子序列)
最少拦截系统Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 44873 Accepted Submission(s): 17603Problem Description某国为了防御敌国的导弹袭击,发展出原创 2017-08-14 16:58:42 · 345 阅读 · 0 评论 -
HDU1078 FatMouse and Cheese DP(记忆化搜索)
FatMouse and CheeseTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11002 Accepted Submission(s): 4671Problem DescriptionFatMo原创 2017-08-15 10:49:18 · 237 阅读 · 0 评论 -
[leetcode 546] 移除盒子
leetcode546题意:给定n个盒子,每个盒子都有一种颜色,将k个相邻的相同颜色的盒子移除,可以得到k*k的分数,问如何移除才能获得最大分数?输出最大分数即可,n <= 100。解析:本题使用动规的方法,dp[i][j][k]代表boxes[i~j],并且i前面有连续k个和i相同颜色的盒子时可获得的最大得分,所以本题的最终目标是dp[0][n-1][0]。状态转移方程...原创 2019-09-17 16:07:38 · 395 阅读 · 0 评论