我的背包代码输出错误?

Posted

技术标签:

【中文标题】我的背包代码输出错误?【英文标题】:My knapsack code is giving wrong output? 【发布时间】:2016-10-01 16:21:38 【问题描述】:

我试图写一个简单的 0-1 背包问题,但遇到了一些错误。帮助将不胜感激。

T = int(input().strip())
def knapsack(n,k,ar):
    if n==0 or k==0:
        return 0
    elif ar[n-1]>k:
        return knapsack(n-1,k,ar)
    else:
        return max(knapsack(n-1,k,ar),ar[n-1] + knapsack(n-1,k-ar[n-1],ar))
for t in range(T):
    a = input().strip()
    n,k = int(a[0]),int(a[2])
    ar = [int(i) for i in input().strip().split(' ')]
    print(knapsack(n,k,ar))

我再次运行这个输入

2
3 12
1 6 9
5 9
3 4 4 4 8

我收到错误的输出?我找不到任何错误。提前致谢

输出

1
8

【问题讨论】:

【参考方案1】:

您的算法很好,但您对函数的输入是错误的。

在第一个输入中,n,k = int(a[0]),int(a[2]) 行将31 作为输入而不是312。 我猜你应该改用list(map(int, input().split())),并得到a[0]a[1]

【讨论】:

以上是关于我的背包代码输出错误?的主要内容,如果未能解决你的问题,请参考以下文章

我的背包有问题吗

dp 的背包问题让我的答案错误

分段错误背包问题

背包分支定界错误结果

laravel - 背包 - addFilter 自定义查询

这两种背包算法相同吗? (他们总是输出同样的东西吗)