需要仔细体会s1和s2都很小的时候,其枚举量为什么是s1+s2
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int t,kase;
int main()
{
scanf("%d",&t);
kase=1;
while(t--)
{
long long n,s1,v1,s2,v2;
long long ans=0;
cin>>n>>s1>>v1>>s2>>v2;
printf("Case #%d: ",kase++);
if(s1 > s2)//体积小的去前边
{
swap(s1, s2);
swap(v1, v2);
}
if(n / s2 >= 65536)
{
for(long long i = 0; i <= s1; i++)
{
ans = max(ans, v2*i + (n-s2*i)/s1*v1);
}
for(long long i = 0; i <= s2; i++)
{
ans = max(ans, v1*i + (n-s1*i)/s2*v2);
}
}
else // s2 is large
{
for(long long i = 0; s2*i <= n; i++)
ans = max(ans, v2*i + (n-s2*i)/s1*v1);
}
printf("%lld\n",ans);
}
return 0;
}