- #include
- using namespace std;
- int n,m;
- int a[20];
- //怎么觉得要背包一下啊
- //把选的砝码作为物品,问能配出多少种不同的容量
- //f[i] 选到第 i 个物品 ,能达到的不同重量
- //20 * 1000 = 20000
-
- int lowbit(int x){
- int res = 0 ;
- while(x){
- res += x & 1;
- x = x >> 1;
- }
- return res;
- }
-
-
- int main(){
- int res = 0 ;
- cin>>n>>m;
- for(int i = 0 ; i < n ; i ++) cin>>a[i];
- for(int i = 0 ; i < (1 << n) ; i++){
- if(lowbit(i) != n-m) continue;
- bitset<2000> dp;
- int s = 0;
- dp[0] = 1;
- for(int j = 0 ; j < n ; j++){
- if(i >> j & 1){
- s += a[j];
- //dp |= a[j];
- dp |= dp << a[j];
- }
- }
-
- res = max(res,(int)dp.count());
- }
-
- cout<
1; -
-
- }
纯属乱搞,感觉正解还是得搜索