搬砖

题目描述

Aya 在工地上搬砖。她手上有 n 块砖头,需要将其平分为两份运达不同的终点。注意,砖头不能切割成半块。

Aya 可以选择一块一块的搬砖,此时搬一块砖需要 a 的体力。Aya 也可以选择将砖头搬上一个可以容纳 k 块砖头的推车(车可以不装满),再推动推车到达终点,这整个过程需要 b 的体力。Aya 可以自由选择搬砖的方式。例如说她可以一块一块地搬一些砖之后再用推车进行搬砖。

Aya 想要知道,在这个过程中,耗费体力的最小值是多少?

输入格式

输入 4 个正整数 n,a,k,b,含义如题所述。

输出格式

输出一行一个整数,表示耗费体力的最小值是多少。如果无法将这些砖头平分成两份,则输出 −1

输入输出样例 #1

输入 #1

12 3 2 2

输出 #1

12

输入输出样例 #2

输入 #2

15 3 2 2

输出 #2

-1

说明/提示【样例解释】

对于样例 11,将砖平分为两份,则每份一共有 66 块砖。用小推车一次可以搬 22 块砖,只耗费 22 的体力,比一块一块搬砖划算。因此 Aya 选择用三次小推车搬砖,耗费 66 的体力。注意一共有两份砖头,因此一共是耗费 1212 的体力。

【数据范围】

对于所有数据,1≤n,a,k,b16。请注意数据范围。

//正确代码 
#include <iostream>
using namespace std;
int main(){
    long long n,a,k,b;
    cin>>n>>a>>k>>b;
    if(n%2!=0){
        cout<<-1;
        return 0;
    }
    n /= 2;
    if(n%k==0){
        long long p = n*a*2;
        long long p1 = n/k*b*2;
        cout<<min(p,p1);
    }else{
        long long p = (n/k*b+n%k*a)*2;
        long long p1 = (n/k+1)*b*2;
        long long p2 = n*a*2;
        cout<<min(p,min(p1,p2));
    }
    return 0;
}

 

posted @ 2025-07-01 18:48  王一行(小号)  阅读(10)  评论(0)    收藏  举报