2016 junior T1 買鉛筆 題解
阿新 • • 發佈:2018-11-26
題目描述
P老師需要去商店買n支鉛筆作為小朋友們參加NOIP的禮物。她發現商店一共有
3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,價格也有可能不同。為了公平起 見,P老師決定只買同一種包裝的鉛筆。商店不允許將鉛筆的包裝拆開,因此P老師可能需要購買超過n支鉛筆才夠給小朋 友們發禮物。現在P老師想知道,在商店每種包裝的數量都足夠的情況下,要買夠至少n支鉛筆最少需要花費多少錢。
輸入格式:
第一行包含一個正整數n,表示需要的鉛筆數量。
接下來三行,每行用2個正整數描述一種包裝的鉛筆:其中第1個整數表示這種 包裝內鉛筆的數量,第2個整數表示這種包裝的價格。
保證所有的7個數都是不超過10000的正整數。
輸出格式:
1個整數,表示P老師最少需要花費的錢。
輸入樣例1:
57
2 2
50 30
30 27
輸出樣例1:
54
輸入樣例2:
9998
128 233
128 2333
128 666
輸出樣例2:
18407
輸入樣例3:
9999
101 1111
1 9999
1111 9999
輸出樣例3:
89991
樣例1說明:
鉛筆的三種包裝分別是:
2支裝,價格為2;
50支裝,價格為30;
30支裝,價格為27。
P老師需要購買至少57支鉛筆。
如果她選擇購買第一種包裝,那麼她需要購買29份,共計
2×29=58支,需要花費的錢為2×29=58。
實際上,P老師會選擇購買第三種包裝,這樣需要買2份。雖然最後買到的鉛筆數量更多了,為27×2=54,比第一種少。
對於第二種包裝,雖然每支鉛筆的價格是最低的,但要夠發必須買2份,實際的花費達到了 30×2=60,因此P老師也不會選擇。所以最後輸出的答案是54。
解題思路:
這道題千萬不能看錯題目,如果錯看成了三種鉛筆能一起買,那這道題就是T3的水準了。
看清題後會發現只要三個一個一個試一下,選出最小值即可。
程式碼:
#include <bits/stdc++.h>
using namespace std;
struct kinds{
int money;
int sum;
}b[3];
int main(){
int a;
cin>>a;
int ans[3];
for(int i=0;i<3;i++){
cin>>b[i].sum>>b[i].money;
if (a%b[i].sum==0){
ans[i]=a/b[i].sum*b[i].money;
}else{
ans[i]=(a/b[i].sum+1)*b[i].money;
}
}
cout<<min(ans[0],min(ans[1],ans[2]));
return 0;
}
這道題應該算是第一題中較難的一道了。。。