日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

混合背包问题,和多重背包问题一样的处理

發布時間:2024/9/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 混合背包问题,和多重背包问题一样的处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題

如果將三種背包問題混合起來。也就是說,有的物品只可以取一次(01背包),有的物品可以取無限次(完全背包),有的物品可以取的次數有一個上限(多重背包)。應該怎么求解呢?

轉化為01背包問題,對的就是和多重背包一模一樣,min(V // C[i],M[i])包含了3中情況:

def change_multiple_to_01(N,V,C,W,M):C_ =[]W_ =[]for i in range(N):t = min(V // C[i],M[i])k = 1j = twhile 2*k <= t:C_.append(k*C[i])W_.append(k*W[i]) j -= kk *= 2C_.append(j*C[i])W_.append(j*W[i])def pack_0_1_first(N,V,C,W): F =[0]*(V+1) for i in range(1,N+1):for v in range(V,C[i-1]-1,-1):F[v] = max(F[v],F[v-C[i-1]] + W[i-1])return F[V]N_ = len(C_)return pack_0_1_first(N_,V,C_,W_)

使用通用的狀態方程:F [i , v] = max {F [i ? 1, v ? k ? C i ] + k ? W i | 0 ≤ k ≤ min{M i,V//Ci}

def pack_01_and_complete_and_multiple_Bottom_up(N,V,C,W,M):list = np.zeros((N+1,V+1),dtype=int)for i in range(1,N+1):for j in range(0,V+1):t = min(j // C[i-1],M[i-1])result = -1000for k in range(t+1):A = list[i-1,j-k*C[i-1]] + k*W[i-1]if A > result:result = Alist[i,j] = result return list[N,V]

假如01和完全混合,可以簡化如下處理:

def pack_01_and_complete_Bottom_up(N,V,C,W,M):list =[0]*(V+1)for i in range(1,N+1):if M[i-1] == 1:for v in range(V,C[i-1]-1,-1):list[v] = max(list[v],list[v-C[i-1]] + W[i-1])if M[i-1] == 1000:for v in range(C[i-1],V+1):list[v] = max(list[v],list[v-C[i-1]] + W[i-1]) return list[V]

運行結果:

#%% N = 7 V = 100 C = [11,2,3,9,13,6,7,5] W = [1,2,9,7,5,11,6,14] M = [1000,1,1000,1,1000,1,1,1]print pack_multiple_Bottom_up(N,V,C,W,M) print change_multiple_to_01(N,V,C,W,M) print pack_01_and_complete_Bottom_up(N,V,C,W,M) print pack_01_and_complete_and_multiple_Bottom_up(N,V,C,W,M)print change_multiple_to_01_yes_or_no(N,V,C,M) print pack_multiple_yes_or_no(N,V,C,M)297 297 297 297 True 1

總結

以上是生活随笔為你收集整理的混合背包问题,和多重背包问题一样的处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。