(一)背包问题知识点:
(二)经典测试题:
已知n=8种,每种一件。背包最大负载M=110。
重量w和价值v如下表,怎样装价值最大?贪心算法
求X[N]最优解,写出求解过程;强化为0/1背包问
题,编程求出X[N]的值。
#include <stdio.h>
#include <string.h>
#define M 110//背包容量
#define N 8 //物品数量
int Max(int w[] , int v[]){
int dp[N+1][M+1];//0-N个物品,背包容量为M
int i,j;
memset(dp,0,sizeof(dp));
for(i=1;i<=N;i++){
for(j=1;j<=M;j++){
if(j<w[i]){
dp[i][j]=dp[i-1][j];
}
else{
int a = dp[i-1][j];
int b = dp[i-1][j-w[i]]+v[i];
dp[i][j] = a>b?a:b; //可以用max
}
}
}
for(i=0;i<=N;i++){
for(j=0;j<=M;j++){
printf("%d ",dp[i][j]);
}
printf("\n");
}
return dp[i][j];
}
int main(void){
int w[9] = {0,1,11,21,23,33,43,45,55};
int v[9] = {0,11,21,31,33,43,53,55,65};
int result = Max(w,v);
printf("Minimum Multiplications: %d\n", result);
return 0;
}
最大价值量为159,由结果推得,x[N]依次为1,1,1,1,1,1,0,0
(ง •_•)ง远离内耗,不浪费时间,加油呀!---小毛同学