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_
数组值,然后确定最高值并打印出来。
例如:c
有t1
,所有这些都等于或低于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]
我被困在这里。
答案 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))))