各位小哥哥,你们有女朋友吗?没有的,请自觉退出,谢谢合作,女生的话,你们随意
你们有没有遇到这样的问题 :就是你们要出去玩,干啥我就不说的太清了,反正你们就是想出去玩,但是,你们的背包太小了,装不下所有的东西,但是由于你的女朋友的心情完全取决于你带的所有物品的总价值高不高,你为了让你女朋友开心,你就开始学习了这个算法。。。。嘿嘿嘿
所有题目的前提:假设你们有n件物品,背包可以装下物品最大重量是m,第 i 件物品的价值是v[i],重量是w[i](是不是感觉无从下手,来来来,爸爸帮你,,,)
原材料:w[],v[]数组记录状态,n,m就不多说了,dp[]来记录当前最优解
- 01背包
题目:(假设你们很穷)每件物品只有一个
for(i=1;i<=n;i++)
for(j=m;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
- 完全背包
题目:(假设你们很富)每件物品有无数个
for(i=1;i<=n;i++)
for(j=w[i];j<=m;j++)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
- 多重背包
题目:(假设你们很一般。。。)每件物品只有有限个
for(i=1;i<=n;i++)
{
for(j=m;j>=1;j--)
{
k=min(j/w[i],num[i]);
for(t=1;t<=k;t++)
if(k*w[i]<=j)
dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);
}
}
得到的就是最优解的一个数组,dp[m]就是能放入的最大价值
什么?你还没看明白?来来来,这里有详解>>>>>>>>>>>>一般比较笨的人,才会点我
什么?你没有女朋友?来来来,出门右拐,那里有一个墙,你去自闭吧,想想为啥别人都有,就你没有,啧啧啧