C, PHP, VB, .NET

Дневникът на Филип Петров


* Писна ми от задачи с преливания

Публикувано на 02 ноември 2011 в раздел Математика.

Класическата задача с преливане на вода от едни съдове в други се дава непрекъснато по различни блогове и форуми. Не ви ли писна? Хайде да свършим веднъж завинаги с нея!

Дадени са n на брой съда a1,...an, всеки от които побира съответно b1,...,bn литра вода. Първите a1,...ak съда са пълни с вода, а останалите ak+1,...an са празни. Покажете как (ако е възможно) ще напълните точно "l" на брой съда с точно "x" литра вода. (l≤n и x≤max(bi), i=1,...,n). Успех!

 



2 коментара


  1. Ъъъ, за това има генерална формула ли? Никога не ми е хрумвало да търся такава o.O

  2. Хаха, ами не, формула едва ли има. Не, че съм търсил и чел много, но задачи от подобен тип винаги са били тежки и то дадени с конкретни числа. А тук задачата е обобщена с произволни параметри :)

    В една съвместна публикация с един колега разгледахме систематизиран метод за решаване на задачи с дискретна оптимизация и в частност дадохме пример със задачата с преливанията от три туби (уточнявам за по-младите - задачата от "Умирай Трудно 3" :P). Начинът беше с построяване на проективна равнина, в която всеки връх се явява точка на възможно текущо състояние, а всяка съседна - възможен преход. Така имаме постановка, при която имаме дадено текущо състояние и трябва да намерим най-късия път до търсено крайно състояние. Нататък решението е лесно - дискретната математика е открила отдавна как се правят тези неща с графите :)

    Да де, ама там имаме дадени точно определени параметри. А в тази горе - не. Освен това тубите са "n" и малко трудно се чертае (то трудно се и фантазира, а за чертаене и дума да не става). Затова и написах "успех" :) Ако някой я реши (за което вярвам 100-120 страници ще са достатъчни само за резюме на извършения труд), то ще свърши едно добро дело - няма повече да ни занимават със задачи с преливания.

Добави коментар

Адресът на електронната поща няма да се публикува


*