int c[105],w[105],num[105]; //分别表示 花费 价值(重量) 和数量
int dp[105]; //表示 动态数组
int v,V,V1; // V 表示总的 体积 也就是空间 因为是全局变量 所以下次使用只能用V 而不能用其它
void ZeroOnePack(int c, int w) //01 背包
{
for(int v = V; v >=c; v--)
{
dp[v] = max(dp[v],dp[v-c]+w);
}
}
void CompletePack(int c, int w) //完全背包
{
for(int v = c; v <= V; v++)
{
dp[v] = max(dp[v],dp[v-c]+w);
}
}
void MultiplePack(int c, int w, int num) //多重背包 已经优化过了
{
if(c * num >= V)
{
CompletePack(c,w);
}
else
{
int k = 1;
while(k < num)
{
ZeroOnePack(k*c, k*w);
num -= k;
k <<= 1;
}
ZeroOnePack(num*c, num*w);
}
}