赞
踩
动态规划主要用于求全局最优解,通常可以解决以下问题:
动态规划运用分治的思想,将大问题拆解成许多小问题。
比如01背包问题,首先求只装入一个物品时的最大价值,再此基础再求装入两个物品,最终求得计入所有物品时的最大价值。
再比如Floyd算法,首先求解只能经过一个结点的情况,再此基础上,再计算经过两个节点的情况,以此类推,最终找到多源最短路解。
解题步骤如下:
给定一个重量数组v和价值数组w,以及一个背包的最大承重量m,每个物品只能用一次,求在不超过背包最大承重量的前提下,能够装入背包的物品的最大总价值。v=[1,2,3,4] w=[3,2,4,5]。
for(int i = 1; i <= n; ++i) // 选取多少个物品
for(int j = 0; j <= m; j++){ // 容积
f[i][j] = f[i-1][j];
if(j > v[i]) // 如果总容积大于当前物品重量
f[i][j] = max(f[i][j], f[i-1][j-v[i]]+w[i]); // 找到在没选择该物品前的最大价值
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。