问题描述:-最大化Loot问题的值,找到适合背包的项目的最大值。
输入:背包的容量W以及重量(w1,.。。和每磅价格(p1,。。。,p)的n种不同化合物。
输出:适合于给定容量背包的物品的最高总价:即p1·u1+··+p·u的最大值,使u1+··+u≤W和0≤u i≤w适用于所有i。
输入格式-输入的第一行包含com-磅的编号n和背包的容量W。接下来的n行定义了化合物的价格和权重。第一条线包含每磅p的价格和第一种化合物的重量w.
输出格式-输出符合背包的化合物的最高价格。
这是我的密码:-
b = [] # list
n = input
我解决了允许重复元素的背包问题:
给定与n项相关的权重和值以及允许这些项目的最大容量。如果我们可以为总允许重量W选择任意次数的权重,那么我们可以达到的最大值是多少?投入:W= 10权重= 2,3,6,4成本= 3,4,6,10输出: 23
我写了这段代码。有什么办法可以改进吗?
def knapsack(W, weight, cost):
#import pdb; pdb.set_trace()
table = [0] * (W+1)
for w in xrange(W+1):
max_so_far = 0
for i, wt in en
为什么我得到一个分段错误(核心转储)错误?
我没有尝试太多,我知道代码可以工作,但stepik显示了这些错误
#include <iostream>
using namespace std;
int maximum(int a, int b)
{
return (a > b) ? a : b;
}
int knapSackValue(int capacity, int weight[], int value[], int x)
{
int i, w;
int Kn[x + 1][capacity + 1];
for (i = 0; i <= x; i
学习课程
我已经实现了一个仅使用两行的0-1背包算法。
它输出正确的最终值。
Names包含正在使用的每个元素的id。
def KnapSack(val, wt, n, W):
names = n
n = len(n)
mat = [[0 for i in range(W + 1)] for i in range(2)]
i = 0
while i < n:
j = 0
if i % 2 == 0:
while j < W:
j += 1
我最近的实验任务让我尝试实现0/1背包问题的贪婪算法,并打印出背包的内容以及背包的总价值。到目前为止,我可以让它输出背包的总价值,但我在输出背包中的物品时遇到了问题。 #class definitions for the greedy approach
class Item:
def __init__(self,weight,value):
self.weight = weight
self.value = value
self.price_kg = value / weight
def __repr__(self):
这是我处理动态编程的第一个任务,我发现它相当困难。
问题:
给定一个容量为W的背包和n个重量为[wt,...,wtn - 1 ]的金条,找出最大数量的金条可以装入背包而不重复。
输入:行1:(容量背包(W))(数量金条(N))行2: n条金条(wt)的重量
输出:最大重量(金条),可放入容量为W的背包中
我的代码:
import sys
def optimal_weight(W, wt):
"""Find max weight that can fit in knapsack size W."""
# Create n nest
有没有人能帮我提高这个背包算法的时间复杂度,我已经用滑动数组来提高空间复杂度了。
问题如下:
给定大小为n的A[i]项,整数m表示背包的大小。这个背包你能装满多少?
如果我们有4个大小为[2, 3, 5, 7]的项目,而背包大小为11,我们可以选择[2, 3, 5],这样这个背包的最大大小是10。如果背包大小为12,我们可以选择[2, 3, 7]并完全填充它。
函数应该返回我们可以在给定的背包中填写的最大大小。
class Solution:
# @param m: An integer m denotes the size of a backpack
# @param A: Given n
我正在尝试实现递归背包,它将返回2件事:
通过填充用于填充背包的元素的knapsack.Indexes得到最大值.
请注意,我不想使用动态规划方法来完成这个任务(通过反向迭代2D矩阵来获得元素的索引)。我想了解如何用递归的背包方法来完成这个任务?
这是我在下面尝试过的(获得正确的MaxValue (op#1),但没有得到正确的索引列表(op#2)):
int knapsack(vector<int> wt, vector<int> val, int W, int N, vector<int>& idx)
{
if (W == 0 || N =
到目前为止,我正在尝试在haskell中解决分数背包问题
代码:
{- Input "how much can the knapsack hole <- x" "Possible items in sack [(label, value, weight), ...]" -}
knap x [] = []
knap x y = if length y == 1 then
输入列表的格式为[(Char,Integer,Integer),... ]列表列表(字符列表、整数列表和整数列表)。
我的问题是试图找出可能放在背包里的每一件物品的标签、价值和重量。(从列
给定n个尺寸为Ai和value Vi的项目,以及一个大小为m的背包。您可以在背包中输入的最大值是多少?
你在一次真正的面试中见过这个问题吗?是的示例给出了4项大小为2、3、5、7和值1、5、2、4的项目,以及大小为10的背包,最大值为9。
注意,您不能将项目划分为小块,并且您选择的项目的总大小应该更小或等于m。
int knapsack(int m, vector<int> A, vector<int> V) {
int dp[m + 1], tmp[m + 1];
for (int n = 1; n <= m; n++) {
我很难用背包来解决背包问题。
例如,对于以下值,背包函数将返回14作为解决方案,但正确的结果应该是7。
int n = 3, weights[] = {2, 3, 1}, values[] = {6, 15, 7};
int solution = 0, max = 2;
void Knapsack (int i, int max, int value, int *solution)
{
int k;
for (k = i; k < n; k++) {
if (weights[k] <= max) {
Knapsack (k, max - weig
这是一个古老而著名的背包问题:
这里我有一个约束的背包问题。
我有大小为W = 100000000和N = 100的背包,我为其编写了动态解决方案,我的算法的复杂性是O(100000000*100),这在时间和空间上都太大了,但是这里有一个条件,即无论是W ≤ 50000 or max 1≤ i ≤ n Vi ≤ 500.还是W ≤ 50000 or max 1≤ i ≤ n Vi ≤ 500.,所以如果背包大小超过50000,则项目的最大值是有限的。
所以,现在我想知道,在这种情况下,如何降低算法的时间复杂度?我认为背包问题取决于背包的大小和项目的数量,那么项的值如何改变我的算法?