随笔分类 - 动态规划
动态规划-HDU - 2069 Coin Change
摘要:题意 有五种硬币不限数量,面值分别是1,5,10,25,50。问你用这些硬币组成n元有多少种方式,硬币的总数要不超过100个。 思路 状态表示 如果类比01背包,那么至少我们可以认为应该用一个二维数组来记录状态,在背包问题中,我们用dp[ i ][ j ]来表示“前 i 件物品装入容量为 j 的背包
关于01背包与完全背包的优化的理解
摘要:我目前的水平还做不到从理论上分析,只能从现象出发来说明可行性。 01背包 优化前 for (int i = 0; i <= N; ++i){ for (int j = 0; j <= V; ++j){ dp[i][j] = dp[i - 1][j]; if (w[i] > j) dp[i][j] =
P1049 [NOIP2001 普及组] 装箱问题
摘要:现在的我 #include<iostream> #include<algorithm> using namespace std; int dp[50][20005] = {0}; int main(void){ int V, n; int v[50]; cin >> V >> n; for (int
P1220 关路灯小结
摘要:万恶之源 前言 本来只是打算记下笔记的,但是发现越写越多,心想要不就顺便改成题解吧,于是有了此文,本文也参考了一些题解,因此本文仅作为其它题解的一些补充,一些做题可能遇到的问题。 正题 1. 这是一道区间动态规划(最重要的还是要有) 区间dp:区间dp就是在区间上进行动态规划,求解一段区间上的最优解
关于滚动数组的笔记(第一篇博客)
摘要:背景 最近在学习动态规划==真是个麻烦的小机灵鬼 做到的一道小小的题 P1048 采药 做法 (1)直接DP(一堆离题的废话) 这道题很显然就是一道01背包问题但是它的确是我做的第一道DP题 所以首先设计状态和写出状态转移方程 这俩货是真的难搞 一开始我设计的是记f(x)为采了前x种药材的最大价值,
最长公共子序列笔记
摘要:定义 dp[ i ][ j ]表示s1...si与t1...tj对应的LCS长度 转移(缩小问题规模) 当s[ i+1] = t [ j+1]时,dp[ i + 1 ][ j + 1 ] = dp[ i ][ j ] + 1时。 因为这个元素构成了LCS的一部分,删除它就是删除了LCS的一部分。 对