算法设计 || 第9题:0-1背包问题&动态规划(手写例题+源代码)

(一)背包问题知识点: 

(二)经典测试题:

已知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

(ง •_•)ง远离内耗,不浪费时间,加油呀!---小毛同学

猜你喜欢

转载自blog.csdn.net/weixin_54570972/article/details/132579199