对于取最小值的优先级的问题:
register int last = s ^ (1 << (j - 1));
register int can = max_can_reach(cash[j],reach[last] + 1);
register int res = dp[last] + cash[j];
if(res < dp[s]){
dp[s] = res;
reach[s] = can;
}
register int last = s ^ (1 << (j - 1));
register int can = max_can_reach(cash[j],reach[last] + 1);
register int res = dp[last] + cash[j];
if(can > reach[s]){
dp[s] = res;
reach[s] = can;
}