(1)01背包问题

(1)01背包问题_第1张图片

#include 
#define N 6
#define M 21
#define W 20
int dp[N][M];
int w[N] = {0};
int v[N] = {0};
void knapsack(){
	int i, j;
	int value1, value2;
	for(i = 1; i < N; i++){	// 前i件物品
		for(j = 1; j < N; j++){	// 背包剩余空间
			if(w[i] > j){	// 第i件物品太重放不进去
				dp[i][j] = dp[i - 1][j];
			}	
			else{
				value1 = dp[i-1][j - w[i]] + v[i];	// 第i件物品放进去
				value2 = dp[i-1][j];	// 第i件物品不放进去
				dp[i][j] = max(value1, value2);
			}
		}	
	}
}
int main(){
	knapsack();
	printf("%d\n", dp[5][20]);		// 5件物品,背包容量为20,最多可以放的价值
	return 0;
}

你可能感兴趣的:(算法刷题,动态规划)