1. 程式人生 > >2016 junior T1 買鉛筆 題解

2016 junior T1 買鉛筆 題解

題目描述

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; }

這道題應該算是第一題中較難的一道了。。。