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;
}