# Greedy# Math# Iteration

c168 - NOIP2016 1.买铅笔

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算購買至少 n 支鉛筆所需的最小花費。商店提供三種不同包裝的鉛筆,每種包裝有不同的鉛筆數量和價格。P老師必須購買同一種包裝的鉛筆,並且可以購買超過 n 支鉛筆以滿足需求。

解題思路

解題思路是針對三種包裝的鉛筆,分別計算購買足夠數量所需的最小花費,然後取最小值。對於每種包裝,計算需要購買的包裝數量,並將數量向上取整(因為不能拆開包裝)。然後,將包裝數量乘以單價,得到總花費。最後,比較三種包裝的花費,輸出最小的花費。程式碼中使用了迴圈來計算每種包裝所需的包裝數量。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	int n,a,ap,b,bp,c,cp;
	while(cin >> n){
		cin >> a >> ap >> b >> bp >> c >> cp;
		int min,i;
		for(i=1;a*i<n;i++){};
		min=ap*i;
		for(i=1;b*i<n;i++){};
		if(min>bp*i)
			min=bp*i;
		for(i=1;c*i<n;i++){};
		if(min>cp*i)
			min=cp*i;	
		cout << min << endl;
	}
}

Discussion