Educational Codeforces Round 94 (Rated for Div. 2)B. RPG Protagonist

Educational Codeforces Round 94 (Rated for Div. 2)B. RPG Protagonist

题意:
给你俩个背包p,f,俩种物品a,b的数量,和重量。求最多能拿多少物品。
思路:
暴力是一门艺术,好耶!
题目给的p,f很大,直接背包肯定8行。假设a<b(可以交换),如果第一个背包拿了s1个第一个物品,那么拿第二种和第二个背包拿东西都可以确定了。也就是说,s1的大小从0到可以拿的最大值,然后根据s1的数量再计算剩下的物品的数量,取最大值即可。

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define mem(a, b) memset(a, b, sizeof(a))
#define pb push_back
#define ll long long
using namespace std;
const double PI = acos(-1.0);
const int N = 2e5 + 10;
const int mod = 998244353;
////////////////////////////////
ll ans;
ll p, f, cnts, cntw, sw, ww;
void solve()
{
    ans=0;
    cin >> p >> f >> cnts >> cntw >> sw >> ww;
    if (sw > ww)
    {
        swap(sw, ww);
        swap(cnts, cntw);
    }
    ll s1 = min(cnts, p / sw);
    ll tmp=s1;
    for (int s1 = 0; s1 <= tmp; s1++)
    {
        ll w1 = min(cntw, (p - s1 * sw) / ww);
        ll s2 = min(cnts - s1, f / sw);
        ll w2 = min(cntw - w1, (f - s2 * sw) / ww);
        ans=max(ans,w1+s2+w2+s1);
    }
    cout<<ans<<endl;
}
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Aracne/p/13962149.html