链接:牛客小白月赛
题目描述
盼望着,盼望着,东风来了,春天脚步近了。
值此大好春光,老师组织了同学们出去划船,划船项目收费如下:
双人船最多坐两人,也可以坐一人,收费a元
三人船最多坐三人,也可以坐两人或者一人,收费b元
本次出游加上带队老师共n人,如何安排能使得花费最小呢?
输入描述:
第一行给出一个正整数 T(1≤T≤1000),代表测试数据的组数。
接下来 T 行 每行给出三个正整数n,a,b, 1≤n,a,b≤109,含义如题。
输出描述:
每组输入输出一行,代表最小的花费
输入
2
2 20 200
3 20 20
输出
20
20
代码(Java)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int T=cin.nextInt();
while(T--!=0) {
long a, b, n;
long ans=1L<<60;
n = cin.nextLong();
a = cin.nextLong();
b = cin.nextLong();
if(n>=2){//a
ans=Math.min(ans,(n+1)/2*a);
//System.out.println("a:"+ans);
}
if(n>=3){//b
ans=Math.min(ans,(n+2)/3*b);
//System.out.println("b:"+ans);
}
if(n>=3&&n%2!=0){//a+1*b
ans=Math.min(ans,(n-3)/2*a+b);
//System.out.println("a+1*b:"+ans);
}
if(n>=2&&n%3!=0){//1*a+b
ans=Math.min(ans,(n-1)/3*b+a);
//System.out.println("1*a+b:"+ans);
}
if(n>=4&&n%3!=0){//2*a+b
ans=Math.min(ans,(n-2)/3*b+2*a);
//System.out.println("2*a+b:"+ans);
}
if(n==3) {// 2*a or 1*b
ans=Math.min(2*a,b);
//System.out.println("n==3:"+ans);
}
if(n==2) {// 1*a or 1*b
ans = Math.min(a, b);
//System.out.println("n==2:"+ans);
}
System.out.println(ans);
}
}
}