揹包問題中最主要的思想是f[i][j]=max(v[i]+f[i-1][j-w[i]],f[i-1][j])這個式子可以推廣到其他問題的應用。比如裝載問題。
其實質是求一堆數在一定範圍限制中能取得的和的最大值。
考慮裝載問題時,可以先把問題簡化成只考慮一艘船,即這些貨物在小於c1範圍內能取得的和最大值。這個最大值可以用揹包問題的想法求得。然後在檢查剩下貨物的和與c2的大小關係。
裝載問題時限:1000ms 記憶體限制:10000k 總時限:3000ms
描述:
有兩艘船,載重量分別是c1、 c2,n個貨櫃,重量是wi (i=1…n),且所有貨櫃的總重量不超過c1+c2。確定是否有可能將所有貨櫃全部裝入兩艘船。
輸入:
多個測例,每個測例的輸入佔兩行。第一行一次是c1、c2和n(n<=10);第二行n個整數表示wi (i=1…n)。n等於0標誌輸入結束。
輸出:
對於每個測例在單獨的一行內輸出yes或no。
輸入樣例:
7 8 2
8 7
7 9 2
8 8
0 0 0
輸出樣例:
yes
no
#include
int zhuangzai(int c1,int c2,int n,int w[1000])
,i,j,sum=0,sum1,sum2;
for(i=1;i<=n;i++)
else dp[i][j]=dp[i-1][j]; }}
sum1=dp[n][c1];
for(i=1;i<=n;i++)
sum2=sum-sum1;
if(sum2<=c2) return
1; else
return0;}
int main()
output[++cnt]=zhuangzai(c1,c2,n,w);
}for(int i=1;i<=cnt;i++)
}
揹包問題和裝載問題
有乙個揹包,能盛放的物品總重量為s,設有n件物品,其重量分別為w1,w2,wn,希看從n件物品中選擇若干物品,所選物品的重量之和恰能放進該揹包,即所選物品的重量之和即是s。include include using namespace std const int n 7 物品數量 const int...
C語言中的0 1揹包問題
描述 需對容量為c 的揹包進行裝載。從n 個物品中選取裝入揹包的物品,每件物品i 的重量為wi 價值為pi 對於可行的揹包裝載,揹包中物品的總重量不能超過揹包的容量,最佳裝載是指所裝入的物品價值最高。輸入 多個測例,每個測例的輸入佔三行。第一行兩個整數 n n 10 和c,第二行n個整數分別是w1到...
裝載問題(動態規劃揹包問題)
描述 有兩艘船,載重量分別是c1 c2,n個貨櫃,重量是wi i 1 n 且所有貨櫃的總重量不超過c1 c2。確定是否有可能將所有貨櫃全部裝入兩艘船。輸入 多個測例,每個測例的輸入佔兩行。第一行一次是c1 c2和n n 10 第二行n個整數表示wi i 1 n n等於0標誌輸入結束。輸出 對於每個測...