题目一:
美团在吃喝玩乐等很多方面都给大家提供了便利。最近又增加了一项新业务:小象生鲜。这是新零售超市,你既可以在线下超市门店选购生鲜食品,也可以在手机App上下单,最快30分钟就配送到家。
新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。
每种满减优惠描述为(bi,ci),即满bi减ci(当消费>=bi时优惠ci)。
求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。
新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。
每种满减优惠描述为(bi,ci),即满bi减ci(当消费>=bi时优惠ci)。
求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。
输入描述:
第一行,两个整数n,m。
接下来n行,每行一个正整数ai,以及一个0/1表示是否可以选择特价优惠(1表示可以)。
接下来m行,每行两个正整数bi,ci,描述一款满减优惠。
1 <= n,m <=10
1 <= ai <= 1001 <= ci < bi <= 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
解答:逐个比较各个方案的钱数就可以
1 #include<algorithm> 2 #include<iostream> 3 #include<string> 4 #include<vector> 5 #include<queue> 6 #include<unordered_map> 7 #include<functional> 8 #include<iomanip> 9 using namespace std; 10 11 int main() { 12 13 int buy[10][2] = { 0 }; 14 int discount[10][2] = { 0 }; 15 int m, n; 16 cin >> n >> m; 17 for (int i = 0; i < n; i++) 18 { 19 cin >> buy[i][0]; 20 cin >> buy[i][1]; 21 } 22 for (int i = 0; i < m; i++) 23 { 24 cin >> discount[i][0]; 25 cin >> discount[i][1]; 26 } 27 double min = 99999999.0; 28 double res = 0.0; 29 int resNoDis = 0; 30 int all = 0; 31 //use discount 32 for (int i = 0; i < n; i++) 33 { 34 all += buy[i][0]; 35 if (buy[i][1] == 1) 36 res += buy[i][0]; 37 else 38 resNoDis += buy[i][0]; 39 } 40 double temp = resNoDis + res * 0.8; 41 if (temp < min) 42 min = temp; 43 //use 满减 44 for (int i = 0; i < m; i++) 45 { 46 if (all < discount[i][0]) 47 continue; 48 temp = all - discount[i][1]; 49 if (temp < min) 50 min = temp; 51 } 52 cout << setiosflags(ios::fixed) << setprecision(2)<<min; 53 system("pause"); 54 return 0; 55 }