2011年7月19日 星期二

排列組合四-背包問題



明天就要去遠足了,小綠正打包她的行李,她家有下列五種零食:
名稱
大小
滿足感
海苔
3
4
花生米
4
5
點心麵
7
10
洋芋片
8
11
巧克力
9
13
而這五種零食一定要一整包放進背包不可以打散,現在有一個大小為 N (N<=100)的背包要用來裝零食,請問她可以獲得的最大滿足感為多少?
輸入1:17
輸出1:24
輸入2:100
輸出2:144


(網路參考:http://www.tcgs.tc.edu.tw/~sagit/cpp/q12.htm)
學長做過:http://chscvb.blogspot.com/2010/08/blog-post.html#comments

3 則留言:

  1. 對遞迴又愛又恨
    這樣寫沒有錯
    可是會跑很久=口=


    Dim M3 As Byte
    Dim M4 As Byte
    Dim M7 As Byte
    Dim M8 As Byte
    Dim M9 As Byte
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    M3 = 4: M4 = 5
    M7 = 10: M8 = 11
    M9 = 13
    Do While Not EOF(1)
    List1.Clear
    List1.AddItem 0
    Input #1, X
    Call ABC(X, 0)
    Print #2, List1.List(0)
    Loop
    Close #2
    Close #1
    End
    End Sub

    Sub ABC(ByVal A, ByVal ans)
    If A = 0 And ans > Val(List1.List(0)) Then
    List1.Clear
    List1.AddItem ans
    Else

    If A >= 9 And (A >= 12 Or A = 9) Then Call ABC(A - 9, ans + M9)
    If A >= 7 And (A >= 10 Or A = 7) Then Call ABC(A - 7, ans + M7)
    If A >= 8 And (A >= 11 Or A = 8) Then Call ABC(A - 8, ans + M8)
    If A >= 3 And (A >= 6 Or A = 3) Then Call ABC(A - 3, ans + M3)
    If A >= 4 And (A >= 7 Or A = 4) Then Call ABC(A - 4, ans + M4)

    End If
    End Sub

    回覆刪除
  2. 佑好,
    1.你這題這樣做,是屬於暴力型的,將所有的可能全列出來了。
    當然會慢些。不過,應該是正確的。
    如果你去算一下,所謂的「每單位滿足感」會不會有幫助呢?
    2.你的條件寫的很亂,像 A >= 3 And (A >= 6 Or A = 3)
    那什麼時候會滿足呢?
    a=3,6,7,8,9,...
    所以,你的條件是多餘的,直接寫後面那個不是一樣嗎?

    回覆刪除
  3. 熊掌好,

    我有算各單位的[滿足感/大小]
    用select來挑
    總會與答案少1

    好像是ㄝ,
    原本是想要多一點條件來去掉不可能的答案。

    謝老師。

    回覆刪除