Module: الگوریتم های حریص


Problem

1 /9


فورماجیو پانزروتی می خرد

Theory Click to read/hide

الگوریتم حریص الگوریتمی است که در هر مرحله، نوع بهینه (در مرحله فعلی) را با این انتظار که راه‌حل نهایی در مفهوم کلی بهینه باشد، انتخاب می‌کند.

مثال کوچک:
فرض کنید تعداد نامحدودی سکه با ارزش های مختلف داریم و باید مقدار S را جمع آوری کنیم. بیایید دو مورد خاص را در نظر بگیریم که هر کدام را با یک الگوریتم حریصانه حل خواهیم کرد.
یعنی ما به صورت زیر عمل خواهیم کرد: در هر مرحله یک سکه با بالاترین ارزش (بهترین گزینه در مرحله) می گیریم که از مقدار باقی مانده تجاوز نمی کند.

الف) ارزش سکه ها 1، 5 و 10 و S = 27 باشد.
1) 10 بگیرید، S: 27 -> 17
2) 10 بگیرید، S: 17 -> 7
3) 5، S: 7 -> 2
4) 1، S: 2 -> 1
5) 1، S: 1 -> 0
در نتیجه آنها مقدار پنج سکه را به دست آوردند. شما می توانید بطور مستقل (مثلاً بروت فورس) مطمئن شوید که برای 4 سکه یا کمتر نمی توانید امتیاز 27 را کسب کنید.

ب) اسم سکه ها 1، 5 و 7 و S = 24 باشد.
1) 7 را بگیرید، S: 24 -> 17
2) 7، S: 17 -> 10
3) 7، S: 10 -> 3
4) 1، S: 3 -> 2
5) 1، S: 2 -> 1
6) 1، S: 1 -> 0.
ما با شش سکه امتیاز گرفتیم، اما می‌توانستیم با چهار سکه - دو سکه با ارزش اسمی 7 و دو سکه با ارزش اسمی 5 امتیاز S را کسب کنیم.

همانطور که از مثال مشاهده می شود، همیشه نمی توان مسائل را با یک الگوریتم حریصانه حل کرد. اما اگر به یک پاسخ بهینه کلی منجر شود، معمولاً راحت‌تر از استفاده از برنامه‌نویسی پویا یا روش‌های دیگر خواهد بود.

Problem

فورماجیو به پانزروتی با پر کردن های مختلف بسیار علاقه دارد و مهم نیست که کدام یک. یک بار در حالی که در حالت گرسنگی بود، فورماجیو به یک نانوایی رفت و دید که پانزروتی با گوجه فرنگی، اسفناج و قارچ به فروش می رسد.
Formaggio می خواهد تا حد امکان پانزروتی بخرد، اما مشکل اینجاست که تعداد پانزروتی های موجود در فروش محدود است، درست مانند پول Formaggio.

به Formaggio کمک کنید تا حداکثر تعداد پانزروتی را که می تواند بخرد تعیین کند.

ورودی:
خط اول شامل اعداد P1، P2 و P3 است – هزینه پانزروتی به ترتیب با گوجه فرنگی، اسفناج و قارچ.
خط دوم مقادیر N1، N2 و N3 را تعریف می کند. تعداد پانزروتی منطبق در فروش. 
خط سوم شامل عدد R – مقدار پولی که Formaggio دارد. 
همه اعداد در ورودی اعداد صحیح مثبت هستند که از 10000 تجاوز نمی کنند.

خروجی:
چاپ یک عدد صحیح - حداکثر تعداد پانزروتی که Formaggio می تواند بخرد.

مثال:
  <بدن>
ورودی خروجی
5 3 8
2 6 4
23
7