完全背包问题
完全背包问题 解决方法 跟初级硬币问题递推法 很相似,只需将1改成 对应的数值。
value 背包价值, v体积, n种背包, 体积不超过V,最大价值。
void WKnapsack(int *value, int* v, int n, int V) { int d[1000]; memset(d, 0, sizeof(int)*1000); for(int i = 1; i <= n; i++) { for(int j = 1; j <= V; j++) { if(j >= v[i]) { d[j] = max(d[j], d[j - v[i]] + value[i]); //1换成value[i] } } } printf("%d ", d[V]); }
void WKnapsack2(int *value, int* v, int n, int V)//这个比较好理解 { int d[1000]; memset(d, 0, sizeof(int)* 1000); for (int j = 1; j <= V; j++) { for (int i = 0; i < n; i++) { if (j >= v[i]) { d[j] = max(d[j], d[j - v[i]] + value[i]); } } } printf("%d ", d[V]); }