題目一:
美團在吃喝玩樂等很多方面都給大家提供了便利。最近又增加了一項新業務:小象生鮮。這是新零售超市,你既可以在線下超市門店選購生鮮食品,也可以在手機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 <= 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 }