递归0-1背包

时间:2017-06-01 18:34:05

标签: c++11 recursion knapsack-problem

这里我有两个函数用于递归背包问题,而背包()给出了正确的输出(即220)但是knapsack1()给出了错误的值(即60)。任何人都可以解释为什么?

#include<iostream>
#include<stdio.h>
using namespace std;

 long knapsack1(long w,long wt[],long val[],long n)
    {
        if(n==0||w==0)
        {
            return 0;
        }
        if (wt[n] > w)
        {
        n--;
        }
        else
        {
            return max(knapsack1(w,wt,val,n-1),val[n]+knapsack1(w-wt[n],wt,val,n-1));
        }
    }

 long knapsack(long w,long wt[],long val[],long n)
    {
        if(n==0||w==0)
        {
            return 0;
        }
        if (wt[n] > w)
        { 
       return knapsack(w, wt, val, n-1);
        }
        else
        {
            return max(knapsack(w,wt,val,n-1),val[n]+knapsack(w-wt[n],wt,val,n-1));
        }
    }
int main()
{
   long val[] = {60, 100, 120};
    long wt[] = {10, 20, 30};
    long  w = 50;
    long n = sizeof(val)/sizeof(val[0]);
    printf("%d", knapsack(w, wt, val, n));
    printf("%d", knapsack1(w, wt, val, n));
    return 0;
}

1 个答案:

答案 0 :(得分:1)

尝试在启用警告的情况下对其进行编译... if中的knapsack1 - 分支未返回值,并且行为未定义。

相关问题