01揹包每個只能背一次優化為一維陣列後要從後往前背。
完全揹包每個有多次所以可以從前往後背。
多重揹包轉化為01和完全揹包求解。
#include #include #include #include using namespace std;
int dp[100010],sum;
void zeroonepack(int cost,int value)//01揹包 背的花費,背的價值
}void completepack(int cost,int value)//完全揹包 同上
}void multiplepack(int cost,int value,int num)//多重揹包 花費,價值,數量
else
zeroonepack(num*cost,num*value);//把剩下的背掉
}}int main()
if(sum==0)
break;
printf("collection #%d:\n",z++);
if(sum&1)
printf("can't be divided.\n\n");
else
if(dp[sum]==sum)
else}}
}
01揹包 完全揹包 多重揹包
01揹包 zeroonepack 有n件物品和乙個容量為v的揹包,每種物品均只有一件。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。include include includeusing namespace std const int n 1000 10 int ...
01揹包 完全揹包 多重揹包
01揹包 zeroonepack 有n件物品和乙個容量為v的揹包。每種物品均只有一件 第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。完全揹包 completepack 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的費用是c i 價值是w i 求...
01揹包,完全揹包,多重揹包
01揹包 include int c 101 1001 定義100個物品1000重量的總價值陣列 void calcmaxvalues int n,int t w v 101 w單個物品的重量,v單個物品的價值 for i 1 i n i for i 1 i n i else else printf...