求助大神,每次写背包问题就只得20分左右
查看原帖
求助大神,每次写背包问题就只得20分左右
980693
chenO_o楼主2023/6/2 09:13

代码如下 ,是哪里逻辑出了错误?求助大神们解答一下,感谢啦

int foodbag(int x, int maxV, int maxW)
{
    int i, j;
    int value;
    for (i = 0; i < x; i++)
    {
        for (j = 0; j < 3; j++)
        {
            std::cin >> value;
            array[i][j] = value;
        }
    }
    return process(array, 0, 0, 0, maxW, maxV, 0, x);
}
int process(int array[MAXSIZE][3], int i, int alreadyW, int alreadyV, int Wmaxsize, int Vmaxsize, int alreadyvalue, int num)
{
    if (alreadyW > Wmaxsize || alreadyV > Vmaxsize)
    {
        return 0;
    }
    if (i == num)
    {
        return alreadyvalue;
    }
    return findmax(
        process(array, i + 1, alreadyW + array[i][1], alreadyV + array[i][0], Wmaxsize, Vmaxsize, alreadyvalue + array[i][2], num),
        process(array, i + 1, alreadyW, alreadyV, Wmaxsize, Vmaxsize, alreadyvalue, num));
}
int findmax(int a, int b)
{
    if (a > b)
        return a;
    else
        return b;
}
int main(void)
{
    int res;
    int maxW, maxV, x;
    std::cin >> maxW >> maxV >> x;
    res = foodbag(x, maxV, maxW);
    std::cout << res;
}
2023/6/2 09:13
加载中...