1. 程式人生 > >#127-[庫函式]買鉛筆

#127-[庫函式]買鉛筆

Description

P老師需要去商店買n支鉛筆作為小朋友們參加NOIP的禮物。她發現商店一共有 3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,價格也有可能不同。為了公平起 見,P老師決定只買同一種包裝的鉛筆。

商店不允許將鉛筆的包裝拆開,因此P老師可能需要購買超過n支鉛筆才夠給小朋友們發禮物。

現在P老師想知道,在商店每種包裝的數量都足夠的情況下,要買夠至少n支鉛筆最少需要花費多少錢。

Input

第一行包含一個正整數n,表示需要的鉛筆數量。

接下來三行,每行用2個正整數描述一種包裝的鉛筆:其中第1個整數表示這種 包裝內鉛筆的數量,第2個整數表示這種包裝的價格。

保證所有的77個數都是不超過10000的正整數。

Output

1個整數,表示P老師最少需要花費的錢。

Sample Input

57
2 2
50 30
30 27

Sample Output

54
89991

【說明】
鉛筆的三種包裝分別是:
2支裝,價格為2;
50支裝,價格為30;
30支裝,價格為27。
P老師需要購買至少57支鉛筆。
如果她選擇購買第一種包裝,那麼她需要購買29份,共計2×29=58支,需要花費的錢為2×29=58。
實際上,P老師會選擇購買第三種包裝,這樣需要買2份。雖然最後買到的鉛筆數量更多了,為30×2=60支,但花費卻減少為7×2=54,比第一種少。
對於第二種包裝,雖然每支鉛筆的價格是最低的,但要夠發必須買2份,實際的花費達到了30×2=60,因此P老師也不會選擇。
所以最後輸出的答案是54。

直接一個ceil()完事.

// 很水的......
#include <iostream>
#include <cmath>

using namespace std;

int main(void)
{
	int n, x1, y1, x2, y2, x3, y3, res1, res2, res3;
	
	scanf("%d%d%d%d%d%d%d", &n, &x1, &y1, &x2, &y2, &x3, &y3);
	
	res1 = ceil(n / double (x1)) * y1; // 第一種鉛筆的花費
	res2 = ceil(n / double (x2)) * y2; // 第二種鉛筆的花費
	res3 = ceil(n / double (x3)) * y3; // 第三種鉛筆的花費
	
	printf("%d", min(res1, min(res2, res3))); // 輸出最小花費
	
	return 0;
}