开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第35天,点击查看活动详情
某商店目前库存可乐数量为 kk 瓶。
可乐的进货价格如下:
- 整箱:cc 元/箱。每箱有 nn 瓶。
- 单瓶:dd 元/瓶。
请问,为了使得库存可乐数量不低于 n×mn×m 瓶,该商店至少需要花费多少元钱来购进可乐。
显然,当 k≥n×mk≥n×m 时,无需购进可乐。
输入格式
第一行包含两个整数 c,dc,d。
第二行包含两个整数 n,mn,m。
第三行包含整数 kk。
输出格式
一个整数,表示最少花费的金额。
数据范围
前 44 个测试点满足 1≤c,d,n,m,k≤101≤c,d,n,m,k≤10。
所有测试点满足 1≤c,d,n,m,k≤1001≤c,d,n,m,k≤100。
输入样例1:
1 10
7 2
1
输出样例1:
2
输入样例2:
2 2
2 1
2
输出样例2:
0
难度:中等 |
---|
时/空限制:1s / 256MB |
总通过数:15 |
总尝试数:26 |
来源:AcWing,第84场周赛 |
算法标签 |
挑战模式
分析
这题是acwing这几次周赛里面最简单的第三题了,这题我开始以为是一个dp,后来发现是一个简单的模拟,首先,如果k≥n*m,那么显然输出0,其他情况是如果单买比按箱买便宜的话,就直接单买,如果按箱买便宜,那么就先按先箱买,买到剩下所需量不能构成1箱时,比较这时所需价钱与一箱价钱哪个贵。
代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int N=100;
const int M=100010;
#define ll long long
int main(){
int c,d,n,m,k;
cin>>c>>d;//一箱c元,一瓶d元
cin>>n>>m;//每箱n瓶,需要有n*m瓶
cin>>k;//目前库存
if(k>=n*m) puts("0");
else{
int temp=n*m-k;
if(d*n<=c) cout<<temp*d<<endl;
else{
int mo=temp%n;
int k=temp/n;
if(mo==0) cout<<k*c<<endl;
else{
if(mo*d>=c) cout<<(k+1)*c;
else cout<<k*c+mo*d<<endl;
}
}
}
}
希望能帮助到大家qaq!