C語言中的裝載問題(揹包問題想法的運用)

2021-08-10 02:42:56 字數 1083 閱讀 1119

揹包問題中最主要的思想是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標誌輸入結束。輸出 對於每個測...