# 1114 Piggy-Bank 完全背包

设d\[k]是重量为k时所对应的最小价值，重量不可能凑成k时，置其为-1，表示无穷大 状态转移方程： dp\[k] = 0…………k = 0； dp\[k] = min(value\[j] + dp\[k - weight\[j]])…………k >= weight\[j]; 其中，1=< j <= n，若dp\[k - weight\[j]]) = -1，表示它是无穷大，重量不能达到

本题求的是最小，模板需要做一些细微的改动

```cpp
/*完全背包
有N种物品和一个容量为V的背包，每种物品都有无限件可用。
第i种物品的费用是c[i]，价值是w[i]。
令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值
f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}
优化：f[i][v]=max{f[i-1][v],f[i][v-c[i]]+w[i]}*/
void CompletePack(int cost, int value)
{
    int v;
    for( v = cost; v <= V; v++)
    {
        if(dp[v-cost] == -1)continue;
        if(dp[v] == -1)dp[v] = dp[v-cost]+value;
        else dp[v] = min( dp[v], dp[v-cost]+value);
    }
}
```
