Показать сообщение отдельно
Старый 12.07.2010, 00:08
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Не интересно с допуском!
Вот, раз уж я накидал, чтоб посмотреть, за сколько же оно считает, мож пригодится.
Код AS3:
		public var C:Array = [102, 120, 125, 127, 131, 133, 139, 143, 160, 177, 199, 250, 256, 277, 321, 349, 351, 385, 387, 390];
		public var sum:int = 100009;
		public var A:Array;
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			A = new Array(sum + 1);
			A[0] = 0;
			C.sort(2);//сортируем по убыванию, чтоб самые длинные трубы использовались чаще всего
			for (var i:int = 0; i < C.length; ++i) {
				for (var j:int = 0; j <= sum - C[i]; ++j) {
					if (A[j] != null && A[j + C[i]] == null) {
						A[j + C[i]] = C[i];
						if (j + C[i] == sum) {
							printTubes();
							return;
						}
					}
				}
			}
			trace("not found");
		}
		private function printTubes():void {
			var count:int = 0;
			for (var i:int = sum; i > 0; i -= A[i]) {
				count += A[i];
				trace("труба длиной "+A[i]+" метраж "+count);
			}
			A = null;
			//trace(count);
		}
Ссылка на сайт интересна в плане, что не олимпиада какая.