0 1揹包問題之動態規劃解決演算法 二

2021-08-19 14:20:21 字數 1172 閱讀 3511

#include#includeint m[6][5][8];  //m[i][j][k]表示揹包容量為j,揹包體積為k,可選物品為i,i+1,i+2.....,n時揹包問題的最優解  

int getmin(int x,int y)

int getmax(int x,int y)

void traceback(int w,int b ,int c,int d,int n,int x)

} x[n] = (m[n][c][d]) ? 1:0;

for(j = 1; j <= n; j++)

printf("%d ",x[j]);

printf("\n");

} void knapsack(int *value , int *weight , int *b , int contain ,int d, int n )

;

//先處理記錄**中的最後一行,

for(j = 0; j <= contain; j++)

for(k = 0; k <= d ; k++)

//迴圈處理記錄**中的其他行,

for(i = n-1 ; i > 1; i--)

} //處理記錄**中的第一行,

m[1][contain][d] = m[2][contain][d];

if(contain >= weight[1] && d >= b[1])

m[1][contain][d] = getmax(m[1][contain][d] , m[2][contain - weight[1]][d - b[1]]+value[1]);

printf("the biggest value is %d\n",m[1][contain][d]);

traceback(weight, b ,contain,d,n,x);

} int main()

; //物品重量

int value[6] = ; //物品價值

int b[6] = ; //物品體積

knapsack(value , weight ,b , contain , d , n);

return 0;

}

動態規劃之套匯問題(思考分析 解決 演算法模板)

一 問題描述 套匯是指利用貨幣匯兌率的差異將乙個單位的某種貨幣轉換為大於乙個單位的同種貨幣。例如,假定1 美元可以買0.7 英鎊,1 英鎊可以買9.5 法郎,且1 法郎可以買到0.16美元。通過貨幣兌換,乙個商人可以從1 美元開始 得到0.7 9.5 0.16 1.064美元,從而獲得6.4 的利潤...

動態規劃解決01揹包問題

0 1揹包 動態規劃 問題描述 給定n種物品和一揹包。物品i的重量是wi,其價值是vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?問題分析 對於一種問題,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1。eg 物品個數n 5,物品重量w n 物品價值v...

動態規劃解決0 1揹包問題

把揹包問題抽象化 x1,x2,xn,其中 xi 取0或1,表示第 i 個物品選或不選 vi表示第 i個物品的價值,wi表示第 i 個物品的體積 重量 建立模型,即求max v1x1 v2x2 vnxn 約束條件,w1x1 w2x2 wnxn定義v i,j 當前揹包容量 j,前 i 個物品最佳組合對應...