题目链接

https://codeforces.com/problemset/problem/1400/B

解题思路

肯定先拿重量小的,重量小的拿完了才能拿重量大的,除非小的都拿不完。
首先枚举第一个人拿到重量小的个数,再确定第二个人拿到重量小的个数,再确定第一个人拿到重量大的个数,再最后确定第二个人拿到重量大的个数,四个个数相加的最小值为答案。
我只想说大佬的思路太清晰了,这三个min和一个max直接Orz!!!

AC代码

#include<bits/stdc++.h>

using namespace std;

int main() {
    int t;
    cin >> t;
    while (t--) {
        int f, p, cnts, cntw, s, w, ans = 0;
        cin >> f >> p >> cnts >> cntw >> s >> w;
        if (s > w) {
            swap(s, w);
            swap(cnts, cntw);
        }

        for (int f1 = 0; f1 <= f / s && f1 <= cnts; f1++) {//枚举第一个人拿到物品1的个数
            int f2 = 0, p1 = 0, p2 = 0;
            f2 = min(cntw, (f - s * f1) / w);//确定第一个人最多能拿到多少物品2
            p1 = min(cnts - f1, p / s);//确定第二个人最多能拿到多少物品1
            p2 = min(cntw - f2, (p - s * p1) / w);//确定第二个人最多能拿到多少物品2
            ans = max(ans, f1 + f2 + p1 + p2);
        }
        cout << ans << endl;
    }
}

总结

我开始想贪心,贪不出来,只能二分,二分watest2……