美团点评2018 CodeM资格赛

题目一:

美团在吃喝玩乐等很多方面都给大家提供了便利。最近又增加了一项新业务:小象生鲜。这是新零售超市,你既可以在线下超市门店选购生鲜食品,也可以在手机App上下单,最快30分钟就配送到家。
新店开张免不了大优惠。我们要在小象生鲜超市里采购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 <= 100
1 <= 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 }
原文地址:https://www.cnblogs.com/dapeng-bupt/p/9101360.html