01,完全,多重揹包

2021-07-24 19:36:39 字數 652 閱讀 8346

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...