摘要:
“人人为我”的解法:dp[i][j]表示坐标为(i,j)的点开始下滑的最大长度。则dp[i][j]为(i,j)周围四个点中比(i,j)低,且最大长度最大再加一的值用结构体来储存一个点的坐标和高度,这样按高度从小到大排完序以后还不会丢失坐标的值从小到大遍历所有的点,经过一个点(i,j)时,用递推公式求... 阅读全文
摘要:
接触动态规划的第一题是数塔问题,第二题就是01背包问题了。当时看的懵懵懂懂,回过头来再看这道题还是非常简单的了。用 dp[i][j] 表示取前i种物品,使它们总体积不超过j的最优取法取得的价值总和状态转移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-cost[i]]+... 阅读全文
摘要:
第一种解法是很经典的动态规划,对于值域较小的题目,还可以采用第二种方法,考虑对值域空间-即对容积的可达性进行动态规划。这道题里面采用第二种解法还会有空间上的优化。有时把值域作为一种状态不单单是一种解法,还有可能是唯一的解法。如HDU 1574 RP问题描述有一个神奇的口袋,总的容积是40,用这个口袋... 阅读全文
摘要:
子序列就是子序列中的元素是母序列的子集,且子序列中元素的相对顺序和母序列相同。题目要求便是寻找两个字符串的最长公共子序列。dp[i][j]表示字符串s1左i个字符和s2左j个字符的公共子序列的最大长度。注意s1第i个字符为s1[i-1]于是有递推公式:对于abcfbc和abfcab两个字符串,求公共... 阅读全文