CodeForeces 1400B RPG Protagonist (贪心)

You are playing one RPG from the 2010s. You are planning to raise your smithing skill, so you need as many resources as possible. So how to get resources? By stealing, of course.

You decided to rob a town's blacksmith and you take a follower with you. You can carry at most pp units and your follower — at most ff units.

In the blacksmith shop, you found cntscnts swords and cntwcntw war axes. Each sword weights ss units and each war axe — ww units. You don't care what to take, since each of them will melt into one steel ingot.

What is the maximum number of weapons (both swords and war axes) you and your follower can carry out from the shop?

Input

The first line contains a single integer tt (1≤t≤1041≤t≤104) — the number of test cases.

The first line of each test case contains two integers pp and ff (1≤p,f≤1091≤p,f≤109) — yours and your follower's capacities.

The second line of each test case contains two integers cntscnts and cntwcntw (1≤cnts,cntw≤2⋅1051≤cnts,cntw≤2⋅105) — the number of swords and war axes in the shop.

The third line of each test case contains two integers ss and ww (1≤s,w≤1091≤s,w≤109) — the weights of each sword and each war axe.

It's guaranteed that the total number of swords and the total number of war axes in all test cases don't exceed 2⋅1052⋅105.

Output

For each test case, print the maximum number of weapons (both swords and war axes) you and your follower can carry.

Example

input

Copy

3
33 27
6 10
5 6
100 200
10 10
5 5
1 19
1 3
19 5

output

Copy

11
20
3

Note

In the first test case:

  • you should take 33 swords and 33 war axes: 3⋅5+3⋅6=33≤333⋅5+3⋅6=33≤33
  • and your follower — 33 swords and 22 war axes: 3⋅5+2⋅6=27≤273⋅5+2⋅6=27≤27.

3+3+3+2=113+3+3+2=11 weapons in total.

In the second test case, you can take all available weapons even without your follower's help, since 5⋅10+5⋅10≤1005⋅10+5⋅10≤100.

In the third test case, you can't take anything, but your follower can take 33 war axes: 3⋅5≤193⋅5≤19.

 

题解:一开始当成背包做了,其实只是一个简单的贪心。由于只有两种商品,且每种商品的价值都是1,因此在只有一个人购买的情况下,最优策略是尽可能多地买重量低的商品,剩下的买重量高的。由于题目有两个人,因此只需枚举其中一个人的购买情况,再对另一个人进行贪心即可。

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string.h>
using namespace std;

int get(int s11,int s22,int w11,int w22,int bb)
{
	if (w11>w22) return (get(s22,s11,w22,w11,bb));
	int buys=min(s11,bb/w11);
	int sum;
	sum=buys; bb-=buys*w11;
	sum+=min(s22,bb/w22);
	return sum;
}
int main()
{
	int tt;
	cin>>tt;
	for (int t=1;t<=tt;t++)
	{
		int a,b,s1,s2,w1,w2,ans,buy;
		cin>>a>>b>>s1>>s2>>w1>>w2;
		ans=0;
		for (int i=0;i<=s1;i++)
		{
			if (i*w1>a) break;
			buy=min(s2,(a-i*w1)/w2);
			ans=max(ans,i+buy+get(s1-i,s2-buy,w1,w2,b));
		}
		cout<<ans<<endl;
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值