Fortran - комбинации шаров

Рейтинг: 1Ответов: 0Опубликовано: 13.11.2014

И снова вопрос по комбинаторике. Пусть у меня есть шары трех цветов: красные, синие и зеленые. Красный шар имеет вес 200 грамм, синий - 150 грамм, а зеленый 50 грамм. Все шары различимы. Нужно взять шары таким образом, чтобы общая масса не превышала 500 грамм. Например:

1 красный, 0 синих, 0 зеленых
2 красных, 0 синих, 0 зеленых
1 красный, 1 синий, 0 зеленых      
1 красный, 2 синих, 0 зеленых
1 красный, 0 синих, 1 зеленый

и так далее.

Подскажите, пожалуйста, как найти все такие комбинации с использованием Фортрана. Что-то похожее получится при использовании кода (если число шаров соответственно 2, 3 и 10):

B=500
A=/200,150,50/
do a1=1,2
do a2=1,3
do a3=1,10    
 if B>=a1*A(1)+a2*A(2)+a3*A(3) print *, a1,A(1),a2,A(2),a3,A(3)    
end do    
end do    
end do

Проблема моя более общая, если будет не 3 вида шаров, а 50, 100, 1000. Как можно перебрать такие комбинации, используя более экономичную процедуру? Направьте, пожалуйста, на истинный путь. Может, можно как-нибудь рекурсией или бинарным деревом?

Ответы

Ответов пока нет.