如https://www.cnblogs.com/moderateisbest/p/9465717.html:
0—1背包:dp[ i+1 ][ j ] = max ( dp[ i ][ j ], dp[ i ][ j - ci ] + wi );
完全背包:dp[ i+1 ][ j ] = max ( dp[ i ][ j ], dp[ i +1 ][ j - ci ] + wi );
所以如https://blog.csdn.net/lyhvoyage/article/details/8545852:
01 背包:
for (int i=0; i<n; i++)
for (int j=w; j>=size[i]; j--)
f[j] = max(f[j], f[j-size[i]]+value[i]);
完全背包:
for (int i=0; i<n; i++)
for (int j=size[i]; j<=w; j++)
f[j] = max(f[j], f[j-size[i]]+value[i]);
当使用一维的dp时,代码极其相似,唯一不同是内循环的方向相反
coin-change可用完全背包来解,ac代码:
https://leetcode.com/submissions/detail/254211429/