1,Introduction 1.1 What is Dynamic Programming? Dynamic:某个问题是由序列化状态组成,状态step-by-step的改变,从而可以step-by-step的来解这个问题. Programming:是在已知环境动力学的基础上进行评估和控制,具体来说就是在了解包括状态和行为空间.转移概率矩阵.奖励等信息的基础上判断一个给定策略的价值函数,或判断一个策略的优劣并最终找到最优的策略和最优价值函数. 动态规划算法把求解复杂问题分解为求解…
01背包问题 朴素版:(二维数组) 状态表示: dp[i][j]:从前i个物品中选择(每个物品只能选0或1个)且总体积不超过j的集合的最大价值,则dp[n][m]就是最终答案(n:物品数量,m:最大体积) 状态计算: dp[i][j] = max ( dp[i-1][j] , dp[i-1][j-vi]+wi ) // 由含i和不含i两个子集合计算而来(vi:物品体积,wi:物品价值) 核心代码: int n, m; // n:物品数量, m:最大体积 int v[N], w[N],…
转载自:http://blog.csdn.net/speedme/article/details/24231197 1. 什么是动态规划 ------------------------------------------- dynamic programming is a method for solving complex problems by breaking them down into simpler subproblems. (通过把原问题分解为相对简单的子问题的方式求解复杂问题的…