春游

链接:牛客小白月赛

题目描述
盼望着,盼望着,东风来了,春天脚步近了。

值此大好春光,老师组织了同学们出去划船,划船项目收费如下:

双人船最多坐两人,也可以坐一人,收费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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值