我有两个数字列表,对于第二个的每个成员,我必须告诉它是否可以使用第一个的所有数字获得并放置”或’*’和尽可能多的'(”)’我想要的.
我不能改变顺序.
List1最多可包含20个元素,介于1和100之间.
List2可以包含1到20’000之间的最多5个元素.
EX:
List1=[2 4 3 5]
List2=[19 15 24]
19-> 2+(4*3)+5 YES
15 NO
24->2*(4+3+5) YES
使用蛮力,处理大于10的List1的输入需要很长时间.
编辑:数字总是积极的.
编辑:
我找到了可从列表中获得的最大和最小数字,然后我丢弃了目标超出此范围的所有可能性,然后我尝试所有其余的.
MAX=n1*n2*n3*....*ni if there are 1 thei r added to their smallest neighbour
MIN=n1+n2+....+ni 1 excluded
当输入很大时(List1长于10或List2中的数字大于10000),它仍然不够快
解决方法:
对于List1的每个子列表,计算可以使用该子列表进行的1到20,000之间的数字.由此产生的DP与CYK相似.
我在这里有点模糊,因为这几乎肯定是编程竞赛的问题.
标签:java,algorithm
来源: https://codeday.me/bug/20190531/1187336.html