不会叭不会叭,昨天真有人没写出二进制枚举

    科技2022-07-14  124

    first

    啥是二进制枚举??? 点我便晓得

    Gym传送门 G题 给出n枚不同价值的硬币和一个总价S,现在要选择尽量多的硬币来大于等于S,要求是比如说现在选择的硬币的总和为sum,那么所选择的任何一个硬币x,sum-x都必须<S。

    废话

    一开始使劲贪心,wawawawawawawawa 嗯嗯,是我傻逼了 这个题就二进制枚举就好了

    #include <bits/stdc++.h> using namespace std; typedef long long ll; int t, n, s; int maxx; const int maxn = 100000; int a[maxn]; int main(){ scanf("%d", &t); while(t--){ scanf("%d %d", &n, &s); for(int i = 0; i < n; i++){ scanf("%d", &a[i]); } sort(a , a + n); int sum = 0; maxx = 0; bool flag = 0; int minn = 0x3f3f3f3f; int cnt = 0; for(int i = 0; i <= (1 << n) - 1; i++){ sum = 0; flag = 0; cnt = 0; for(int j = 0; j < n; j++){ if(i & (1 << j)){ sum += a[j]; cnt++; if(!flag){ flag = 1; minn = a[j]; } } } if(sum - minn < s && sum >= s){ maxx = max(maxx, cnt); } } cout << maxx << endl; } return 0; }```
    Processed: 0.012, SQL: 8