java集合的括号_java – 使用”,’*’和括号来判断是否可以从给定集合中获取数字的算法...

我有两个数字列表,对于第二个的每个成员,我必须告诉它是否可以使用第一个的所有数字获得并放置”或’*’和尽可能多的'(”)’我想要的.

我不能改变顺序.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值