Java教程

DP基础——背包问题(上)

本文主要是介绍DP基础——背包问题(上),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

讲背包之前,我先说一下DP。

DP即动态规划,它的根本是暴力,但是是有思想的暴力,而实现方式是递推,DP大部分是逆推,作为我的“本命算法”,是非常简单的。

前面说到,DP是有思想的暴力,暴力有手就行,所以DP的重点就在这个思想上,DP的思想可以分为两部分:

  第一部分是状态的表示,DP是一定要用一个数组存的,不管是几维DP,都要一个DP数组存下来,数组名索性就叫DP[]吧,DP常用来求最大值或最小值。以背包问题举例,背包问题一般都是两维DP,DP[i][j]表示当前重量为j,取第i个物品时取得的价值。

  第二部分就是DP最重要的一点——状态转移,DP必须有一个状态转移方程,也就是当前状态是从哪些状态由哪些方法转移过来的,可以说状态转移方程是DP的灵魂。

背包问题就是DP的一个基础题型,甚至可以说是DP的模板题,它无非就是建模,转移就完事了。

背包问题有01背包、完全背包、多重背包、分组背包、混合背包等等。

关于具体背包问题的思路及代码,第二篇中会有讲解。

这篇关于DP基础——背包问题(上)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!