题解:
这个题想法很简单。
肯定优先选性价比最高的,然后小部分改动。(由于我懒得判断,直接都写了...)考虑如果先选2更优,那么最多可能选1个3,因为2和3的最小公倍数是6,如果选了2个3不如选3个2。再考虑先选3更优,那么可能会选择1个2或者2个2,如果选择3个2不如选择2个3更优。所以从这5种情况里找最优解就好了。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long int main() { int t; scanf("%d",&t); while(t--){ ll n,a,b; scanf("%lld%lld%lld",&n,&a,&b); ll ans=1e18; ans=min(ans,(n+1)/2*a); //全a if(n>=3) ans=min(ans,b+(n-3+1)/2*a); //a+1b ans=min(ans,(n+2)/3*b); //全b if(n>=2) ans=min(ans,a+(n-2+2)/3*b); //b+1a if(n>=4) ans=min(ans,2*a+(n-4+2)/3*b); //b+2a printf("%lld\n",ans); } return 0; }