for(int sub = bin;;sub=bin&(sub-1)){
if(W[bin^sub]<=v) dp[bin]=min(dp[bin],dp[sub]+T[bin^sub]);
if(!sub) break;
}
为什么不能写成
for(int sub = bin;sub;sub=bin&(sub-1)){
if(W[bin^sub]<=v) dp[bin]=min(dp[bin],dp[sub]+T[bin^sub]);
}
bin 是枚举状态,sub 是 bin 的子集。
但是 ...;sub;... 不就是 sub 为 true(即不等于 0)时循环吗?
代码二会输出一个很大的数,即初始化时赋值的数。