日常水博客!
01背包在取得最优值时不一定将背包装满,所以们思考如何在装满背包的情况下取得最优值。
看似是一个不一样的问题,其实解决方法很简单,只要更改初值就可以了。
01背包(不要求装满):
for(int i=1;i<=v;i++)
f[i]=0;
要求装满:
memset(f,-127,sizeof(f));
f[0]=0;
OK了。
这样保证在状态转移时上一层那些本来有值的(意思是可以被填满)在转移到这一层状态时会成为最优解。
相信聪明的你一定会理解!