【发布时间】:2021-09-03 07:47:48
【问题描述】:
为什么在 0-1 背包问题中 INT_min 用于 (max
#include<iostream>
using namespace std;
int solve(int v[], int w[] , int n ,int max){
if (max < 0) {
return INT_MIN; // here this is giving me problem if I use 0 in place of
// INT_min I get wrong ansewrs
}
if (n < 0 || max == 0) {
return 0;
}
int include = 0 ;
int exclude = 0 ;
include = v[n]+solve(v,w, n-1,max - w[n]);
exclude = solve(v,w, n-1,max);
if(include<exclude){
return exclude;
}else{
return include;
}
}
int main(){
int v[] = { 20, 5, 10, 40, 15, 25 };
int w[] = { 1, 2, 3, 8, 7, 4 };
int W = 10;
int n = sizeof(v) / sizeof(v[0]);
cout<< solve(v,w,n-1,W)<<endl;
return 0;
}
对于这个数组,如果我在返回语句中使用 INT_MIN,我得到答案 60,如果我在返回语句中使用 0,我得到 65。
【问题讨论】:
-
请注意,在这种情况下,编写一个返回 0 而不是 INT_MIN 的背包实现是可能的(实际上更好)。 INT_MIN 的使用在这里有点技巧。
标签: algorithm data-structures knapsack-problem