usaco 4.1.2 Fence Rails 搜索剪枝

7 篇文章 0 订阅

这个题是我做usaco第一个不看解题报告做不出来的题目。

题目大意:有N根木料,和需要R根木板,我们就要判断最多可以用那些木料可以切出多少根木板。木料和木板的长度都可能是不同的。N <=50   R  <1024   还有木板的长度要小于128。

根据木板的长度小于128我们可以知道有很多种重复的木板长度是我们需要的,这里就是剪枝的关键所在了。我们当然知道是用深搜判断能否切出X根木板。我是一个一个木板搜,看看能不能满足要求。首先是判断最大的根数,然后递减的判断能不能满足条件。很容易证明能切出X根木板,就一定可以切出X小的木板,所以我们要先把木板排序,然后搜索。

剪枝:

1  如果有三根连续的相等的木板是我们需要的我们可能用木料中的3 2 1和3 1 2去切,这样结果是一样的,所以我们可以剪枝,我们只要相等的时候就按照不增的顺序搜,这样就不会有3 1 2的切法了。木料也可能这样处理。

2   浪费值剪枝,只要剩下的木料的长度<最小的木板长度,这部分就会浪费掉,我们同样可以知道在判断X的时候的最大浪费值,如果浪费值〉最大浪费值当然要剪枝

3   其他在前面已经讲了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值