动态规划
文章平均质量分 72
FDOM
step by step
展开
-
劲歌金曲(dp)
两层动态规划,需要满足在数量最多的情况下时间最长第一层数量最多: 和01背包相似,状态d(i,j)是在面对第i首歌还剩j时间时所能唱的最多歌曲数,得出状态递推方程d(i,j)=max(d(i+1,j),d(i+1,j-len[i])),用递推法得出答案d(1,t)第二层时间最多 :注意是在数量最多的情况下,递推方程和数量差不多#include <iostream>using names...原创 2018-04-10 18:29:24 · 552 阅读 · 0 评论 -
uva 437 The Tower of Babylon (动态规划)
#include <iostream>#include <cstring>using namespace std;//d(x,y)以第x个立方体的第y条边做高能达到的最高高度,递推方程d(x,y)=max(d(i,j))+h[x][y],1<=i<=n,1<=j<=3,记忆化搜索求解int h[101][101];int n;int d[101][1...原创 2018-04-10 21:45:36 · 163 阅读 · 0 评论 -
Cutting Sticks uva 10003(dp)
属于线性结构上的动态规划,区间划分类型,典型题目如最优矩阵链乘,不断分割区间直到边界#include <iostream>#include <cstring>using namespace std;//d(i,j)=min(d(i,p[x])+d(p[x],j))+j-i表示i,j之间切割的最小开销;(i,j)之间没有p[x]时结束,注意是开区间,答案是d(0,len)in...原创 2018-04-12 19:16:51 · 114 阅读 · 0 评论 -
矩阵连乘(dp)
给定一个有n个矩阵的矩阵链A1A2A3…An,其中矩阵Ai(i=1,2,3…n)的维度为pi-1*pi。我们知道,两个维度分别为m*r和r*n的矩阵用一般的矩阵乘法相乘,所需的运算次数为m*r*n,最后得到一个维度为m*n的结果矩阵。对于矩阵链问题,因为矩阵乘法具有结合律,其运算顺序有很多中选择。换句话说,不论如何括号其乘积,最后结果都会是一样的。例如,若有四个矩阵A、B、C和D,将可以有:(AB...原创 2018-04-12 20:34:50 · 663 阅读 · 0 评论 -
最大的算式(动态规划)
先抽象出状态dp(i,j),表示前i个数中有j个乘号的最大值。假设j个乘号中最后一个乘号的位置是第t个数和第t+1个数之间,则若要取最大值,须把第t个数之后的数加在一起再乘上dp(t,j-1),由此得出状态转移方程dp(i,j)=max(dp(t,j-1)*(sum[i]-sum[t])),sum[x]表示前x数的和,用记忆化搜索求解,解是dp(n,k)#include <iostream&...原创 2018-04-19 15:29:43 · 817 阅读 · 0 评论