使用给定的约束查找最高值

时间:2016-09-05 23:29:25

标签: python arrays list

frameContainer.find('INPUT[type=file]').each(function() {
  var file_field = $( this );
  var theFilemanagerRow = false;

  file_field.fileupload({
    dataType:     'json',
    formData:     formData,
    add:          function(e, data) {
                    //need reference to element here
                    theFilemanagerRow = $('<tr>', {
                      id: Math.random().toString(36).substr(2, 10)
                    });
    },
    done:         function(e, data) {
                   if (theFilemanagerRow.length == 1) {
                     theFilemanagerRow.replaceWith(anotherElement);
                   }
    }
  });

});

现在针对c = [416,585,464] A0 = [100,50,200] A1 = [100,100,200] A2 = [100,150,100] A3 = [100,200,0] A4 = [100,250,0] b = [300,300,300,300,300] for num in A0,A1,A2,A3,A4: t0 = num[0]*1 + num[1]*1 + num[2]*1 t1 = num[0]*0 + num[1]*1 + num[2]*0 t2 = num[0]*0 + num[1]*0 + num[2]*0 t3 = num[0]*0 + num[1]*0 + num[2]*1 t4 = num[0]*1 + num[1]*0 + num[2]*0 t5 = num[0]*0 + num[1]*1 + num[2]*1 t6 = num[0]*1 + num[1]*1 + num[2]*0 t7 = num[0]*1 + num[1]*0 + num[2]*1 数组中的每个相应值检查t0中的每个值。如果b中的任何值大于t0,则300将被丢弃。

如果没有,则将每个t0值乘以每个对应的t_数组值,然后确定最高值并打印出来。

例如:ct1,所有这些都等于或低于50,100,150,200,250,因此我们选择300,这会给我们0*c[0] + 1*c[1] + 0*c[2]。但是,这不是最高值。最高值为585,由1049获取。它有t5。以250,300,250,200,250为准0*c[0] + 1*c[1] + 1*c[2]

我被困在这里。

1 个答案:

答案 0 :(得分:0)

我想这可以满足您的需求 - 至少它可以从您在问题中提到的数据中生成总和。我发现您的示例代码非常具有误导性,因为它不会产生您在下面的书面问题描述中引用的t_值。

from itertools import compress

c = [416,585,464]

A0 = [100,50,200]
A1 = [100,100,200]
A2 = [100,150,100]
A3 = [100,200,0]
A4 = [100,250,0]

b = [300,300,300,300,300]

selectors = [(1, 1, 1), (0, 1, 0), (0, 0, 0), (0, 0, 1),
             (1, 0, 0), (0, 1, 1), (1, 1, 0), (1, 0, 1)]

nums_limits = zip((A0, A1, A2, A3, A4), b)
maximum = None
for selector in selectors:
    if all(sum(compress(nums, selector)) <= limit for nums,limit in nums_limits):
        total = sum(compress(c, selector))
        if maximum is None or total > maximum:
            maximum = total

print(maximum)  # -> 1049

你可以用@Stefan Pochmann评论中的generator expression中的一个(longish)linked code替换大部分内容,因此这完全相同:< / p>

print(max(sum(compress(c, selector)) for selector in selectors
                  if all(sum(compress(nums, selector)) <= limit
                         for nums, limit in zip((A0, A1, A2, A3, A4), b))))