C(bitset优化dp)
给定n个重量为vi,权值为wi的物品,求能使重量和恰好为m的物品集合,其权值的异或最大值(题中所有数据范围均小于1024)
异或最大值不具有最优性传递,故用dp[i]维护异或值为i时,能得到的所有种物品集合的重量,用一个1024大小的bitset表示,dp[i][j]表示异或值为i时,是否能凑出重量为j的物品集合。而状态转移为:dp[i^w[j]]=dp[i^w[j]]|(dp[i]<<v[j])
1 |
|
复杂度分析:T(1e3+n+n1e3r+1e3),约等于1e7r(r为bitset移位一次、并一次的时间,约为bitset大小/32)
小细节:j必须从大到小遍历,否则可能出现多次选取同一物品的情况(j^w>j为什么能保证成立)