动态规划
动态规划思想
Mr.琛
钻石要琢磨
展开
-
HDU1024--Max Sum Plus Plus(DP+滚动数组优化)
题意: 给一个序列,把其分成不重复(合法的任意长度)的m段子序列,求最大的m段子段和。 思路: DP,由于序列长度达到了1e6,故还需优化空间。 dp[i][j]表示以j处元素结尾的i段子段和的最大值; 则状态转移方程: (1)dp[i][j]=dp(i,j-1)+a(i) (即a[i]接到元素a[j-1]后面) (2)dp[i][j]=dp(i-1,k)+a(i) (即a[i]自成一段,前面找一...原创 2020-01-30 15:17:33 · 123 阅读 · 0 评论 -
HDU 2126--Buy the souvenirs(01背包+方案数计数)
题意: 有n种纪念品,每种纪念品x元,你有m元,求最多能买多少纪念品及对应方案数。 思路: 若不求方案数则为一个普通的01背包问题,每个纪念品的重量为其价格,价值为1;加上求方案数则要在原来的基础上加多一维记录对应的方案数。 采用二维的滚动数组求解( dp(2, maxn) ): 第一维:dp(0,j)即为01背包最大纪念品数求解,表示容量为j的背包最多能买多少件纪念品。 第二维:dp(1,j)为...原创 2020-01-26 11:44:52 · 196 阅读 · 0 评论 -
HDU 1114(完全背包变式)
HDU 1114,问装满存钱罐的最小价值是多少。 完全背包的变式,限制条件为装满。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int INF=0x3f3f3f3f; int main() { //背包问题变式:要求背包恰好装满,只要在初始化...原创 2019-08-04 15:40:56 · 341 阅读 · 0 评论 -
HDU1176免费馅饼(逆向动态规划)
HDU 1176,每秒都有可能有馅饼落在轴上某点处,每秒只能到所站点,所站点左右去拿馅饼,求能拿到的最多馅饼数。 要逆向考虑,类似于数塔问题,从最后时刻一直转移到起始时间。 dp[ t,x ]表示t时刻在x处能拿到的最多馅饼数,dp[0,5]为最终状态。 状态转移方程: 1.左端点:dp[i,0]=dp[i,0]+max(dp[i+1, j],dp[i+1, j+1]) 2.右端点:dp[i,10...原创 2019-08-04 16:37:45 · 283 阅读 · 0 评论 -
poj 3186--Treats for the Cows(区间DP)
思路:由于从最大区间开始判断会导致给后面的子区间的判断带来后效性,故枚举每个小区间开始推向最大区间,每一步都取最优的情况,枚举完所有最小区间位置情况之后,最优的情况推到最大要求区间即为答案。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define ma...原创 2019-08-08 17:41:54 · 91 阅读 · 0 评论 -
poj1661--Help Jimmy(动态规划)
思路:由于在每块木板上都只有两种操作,要么向左跳,要么向右跳(起始点和地面也可以看成木板),故这两种状态用dp[i,0],dp[i,1]分别表示在i木板上向左跳到达地面的最短时间及向右跳到达地面的最短时间。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std;...原创 2019-08-07 14:35:38 · 162 阅读 · 0 评论 -
poj 3616(Milking Time)(DP)
题意:有m个区间,区间有权值,求选择其中若干个不重叠区间后的最大能得到的权值。 DP:dp[i]表示挤完该时间段的牛奶后的所得的最大权值。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct node { int start; ...原创 2019-08-09 17:44:11 · 288 阅读 · 0 评论 -
HDU1078--FatMouse and Cheese(dp+dfs,记忆化搜索)
题意:老鼠从(0,0)开始,每次只能往上下左右其中一个方向最多走k步,且每次走到的格子的数字要严格大于当前格子,问能走到的所有数字的和最大是多少。 纯搜索会超时,用dp数组结合dfs进行记忆化搜索,大大减少了无用计算。 dp[i,j]表示从当前格子出发最多能获得的最大值,初始化dp数组为0,每次遍历到点的dp[i,j]不为0时,该点无需再遍历,直接取dp[i,j]的值即可,因为深搜(“不撞南墙不回...原创 2019-08-14 19:24:40 · 196 阅读 · 1 评论