思路:紫书上的例题,根据n,s1,s2的规模进行分类枚举(PS:思路很好理解,但是自己写的代码一直WA,最后又去参考了代码仓库的代码)
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,s1,v1,s2,v2;
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T;
scanf("%d",&T);
int kase=0;
while(T--){
scanf("%d%d%d%d%d",&n,&s1,&v1,&s2,&v2);
ll ans=0;
if(s1>s2){
swap(s1,s2);
swap(v1,v2);
}
if(n/s2>=65536){
for(ll i=0;i<=s1;i++){
ans=max(ans,(n-i*s2)/s1*v1+i*v2);
}
for(ll i=0;i<=s2;i++){
ans=max(ans,(n-i*s1)/s2*v2+i*v1);
}
}
else{
for(ll i=0;i*s2<=n;i++){
ans=max(ans,(n-i*s2)/s1*v1+i*v2);
}
}
printf("Case #%d: %lld\n",++kase,ans);
}
return 0;
}