动态规划
dp
小鱼朵~
计算机小废宅
展开
-
1007 Maximum Subsequence Sum (25 分)
1007 Maximum Subsequence Sum (25 分) 题目大意 给出一串序列(可能包含负数、正数和0),求这串序列的最大连续子序列的和,输出这个最大值以及子序列的第一个数和最后一个数。 基本思路 这是典型的动态规划问题,直接参考晴神算法笔记的模板就可以。用dp[i]表示以a[i]结尾的最大连续子序列和。递推边界dp[0]=a[0],start[0]=0。从下标1开始依次更新后面的dp[i]和start[i]:每个dp[i]有三种情况需要讨论,直接看代码,根据不同的情况求出的dp[i]和st原创 2021-10-06 08:33:09 · 155 阅读 · 0 评论 -
1040 Longest Symmetric String (25 分)
1040 Longest Symmetric String (25 分) 题目大意 给出一个序列,求回文串的最大长度。 基本思路 思路很简单,直接套用晴神算法笔记的模板就可以,不够好像有更优的算法(马拉车算法),这里没有给出,我的代码所有测试点也都通过了。需要注意的是,在状态转移方程这一步,为了防止状态值dp为空,需要枚举子串长度。 代码 #include <cstdio> #include <iostream> #include <cstring> #include &原创 2021-10-06 13:13:23 · 95 阅读 · 0 评论 -
1045 Favorite Color Stripe (30 分)
1045 Favorite Color Stripe (30 分) 题目大意 给出nn种颜色作为喜欢的颜色(同时也给出顺序),然后给出一串长度为mm的颜色序列,现在要去掉这个序列中的不喜欢的颜色,然后求剩下序列中的一个子序列,使得这个子序列符合自己喜欢颜色的顺序(不一定所有喜欢的颜色都要出现,某种喜欢的颜色可以重复,但是一定要符合喜欢颜色的顺序)(子序列可以不连续),求这个子序列的最大长度。 基本思路 数据结构: 建立数组book,下标为颜色,值为颜色编号。 建立数组a,a[i]为颜色编号(剔除不喜欢的颜色原创 2021-10-07 09:37:58 · 137 阅读 · 0 评论 -
1068 Find More Coins
1068 Find More Coins 题目大意 用n个硬币购买价值为m的东西,输出使用方案,使得几个硬币加起来价值为m。从小到大排序,输出最小的那个方案。 基本思路 0-1背包问题的变形,这里的容量和价值都用面额表示。 数据结构: 定义数组w,w[i]为第i个硬币的面额。读入后需要逆序排列,为什么请看注释说明。 定义数组dp,阶段数隐含(每个硬币的选择问题表示一个阶段),dp[j]表示在阶段i(阶段i从1枚举到n)面额限制为j(面额j从m逆序枚举到w[i])的情况下所能获得的最大面额。 定义数组choi原创 2021-10-08 13:12:38 · 83 阅读 · 0 评论