#include <map>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
const int lim = 110000;
LL s1,v1,s2,v2,n;
int main()
{
int T,kase=1;
scanf("%d",&T);
while(T--){
cin>>n>>s1>>v1>>s2>>v2;
LL res = 0;
if(n/s1 <= lim){
int num = n/s1;
for(int i = 0 ;i <= num;i++){
LL ans = v1*i;
int V = n - s1*i;
ans += (V/s2)*v2;
res =max(res,ans);
}
}
else if(n/s2 <= lim){
int num = n/s2;
for(int i = 0 ;i <= num;i++){
LL ans = v2*i;
int V = n - s2*i;
ans += (V/s1)*v1;
res =max(res,ans);
}
}
else {
if(s2*v1 >= s1*v2){
for(int i=0;i<s1;i++) {
LL ans = v2*i;
int V = n - s2*i;
ans += (V/s1)*v1;
res =max(res,ans);
}
}
else {
for(int i=0;i<s2;i++) {
LL ans = v1*i;
int V = n - s1*i;
ans += (V/s2)*v2;
res =max(res,ans);
}
}
}
cout<<"Case #"<<kase++<<": "<<res<<endl;
}
return 0;
}
uva - 12325(二分复杂度做题)
最新推荐文章于 2022-09-02 12:19:40 发布
本文介绍了一种通过遍历不同组合来寻找最优价值分配方案的算法。该算法适用于两种类型的资源,通过调整每种资源的使用数量来最大化总价值。文章通过具体实现展示了如何根据不同条件选择最优解,并提供了完整的代码示例。
4175

被折叠的 条评论
为什么被折叠?



