16 種類のオーダーと,それにかかる日数と売上代金の表がある。同じオーダーを 2 つ以上使うことはできない。同時に 2 つ以上のオーダーは処理できない。代金が最大になるような複数のオーダーの組合せを求めよ。ただし,所要日数の合計は 100 日以内でなければならない。
所用日数 売上代金
オーダー 1 9 130
オーダー 2 12 150
オーダー 3 20 190
オーダー 4 23 190
オーダー 5 27 230
オーダー 6 33 290
オーダー 7 31 330
オーダー 8 9 70
オーダー 9 30 330
オーダー 10 9 110
オーダー 11 6 90
オーダー 12 34 310
オーダー 13 34 330
オーダー 14 22 190
オーダー 15 25 230
オーダー 16 13 170
fee = rev(c(130, 150, 190, 190, 230, 290, 330, 70, 330, 110, 90, 310, 330, 190, 230, 170))
day = rev(c(9, 12, 20, 23, 27, 33, 31, 9, 30, 9, 6, 34, 34, 22, 25, 13))
library(e1071)
bc = bincombinations(length(fee))
ans = apply(bc, 1, function(x) { x = as.logical(x); ifelse(sum(day[x]) <= 100, sum(fee[x]), 0) })
( max.fee = max(ans) )
apply(bc[ans == max.fee, ], 1, function(x) paste(paste("Order", which(rev(x) == 1)), collapse=", "))
※コメント投稿者のブログIDはブログ作成者のみに通知されます