今天学了动态规划一些知识,着重看了一下动态规划之背包算法(主要是0-1算法和部分算法),关于动态规划的问题重点是建立递推关系式,有了递推关系式,问题就好解决了,一般的动态规划问题可以理解为就是一个决策问题,当前决策必须对最终的结果是最优的,下面来说说0-1背包问题:限重R,N个物品,重量和价值分别是wi, vi,怎样选取使得价值最大,当前物品选或不选,取其中较大值,其递推关系式为(f[i][j]表示前i个物品使得重量为j时的最大价值)
f[i][j] = max( f[i-1][j], f[i-1][j-wi] + vi ) 前者表示该物品不拿,后者表示该物品拿,根据递推写循环,其复杂度是m*n
关于部分的背包问题(就是可零碎选取),用vi/wi, 然后排序取即可
关于学长提到的可重复选取问题,三重循环,复杂度n^2,建议再看一下呢 f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}
网友评论