题目描述
美团在吃喝玩乐等很多方面都给大家提供了便利。最近又增加了一项新业务:小象生鲜。这是新零售超市,你既可以在线下超市门店选购生鲜食品,也可以在手机App上下单,最快30分钟就配送到家。
新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。
每种满减优惠描述为(b i,c i),即满b i减c i(当消费>=b i时优惠c i)。
求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。
新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。
每种满减优惠描述为(b i,c i),即满b i减c i(当消费>=b i时优惠c i)。
求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。
输入描述:
第一行,两个整数n,m。
接下来n行,每行一个正整数ai,以及一个0/1表示是否可以选择特价优惠(1表示可以)。
接下来m行,每行两个正整数b
i,c
i,描述一款满减优惠。
1 <= n,m <=10
1 <= a
i <= 1001 <= c
i < b
i <= 1000
输出描述:
一行一个实数,表示至少需要消耗的钱数(保留恰好两位小数)。
示例1
输入
2 1 6 1 10 1 12 2
输出
12.80
示例2
输入
2 2 6 1 10 1 5 1 16 6
输出
10.00
思路:先算打了折的,再算使用折扣的和其比较即可。
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;
int main(){
int n,m;
cin>>n;
cin>>m;
vector<vector<int> >Price(n);
vector<vector<int> > YouHui(m);
double TempMoney = 0;
double MinMoney = 99999999.0;
for(int i=0;i<n;i++){
Price[i].resize(2);
}
for(int i=0;i<n;i++){
cin>>Price[i][0];
cin>>Price[i][1];
}
for(int j=0;j<m;j++){
YouHui[j].resize(2);
}
int b,c;
for(int j=0;j<m;j++){
cin>>b;
cin>>c;
YouHui[j][0] = b;
YouHui[j][1] = c;
}
//use discount
int Res = 0;//使用了优惠
double NoRes = 0.0;//未使用优惠
int all = 0;
for(int i=0;i<n;i++){
all+=Price[i][0];
if(Price[i][1] == 1){
Res += Price[i][0];
}
else{
NoRes +=Price[i][0];
}
}
TempMoney = NoRes + 0.8*Res;
if(TempMoney < MinMoney){
MinMoney = TempMoney;
}
//no use discount
for(int j=0;j<m;j++){
if(all < YouHui[j][0])
continue;
else{
TempMoney = all - YouHui[j][1];
if(TempMoney < MinMoney)
MinMoney = TempMoney;
}
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<MinMoney<<endl;
return 0;
}