【USACO4.1.2】栅栏的木料 爆搜剪枝优化

本文介绍了USACO题目4.1.2中如何通过二分答案解决栅栏木料问题,并强调了排序和剪枝在爆搜算法中的关键作用。通过将需要的木板(need)从小到大排序,计算浪费总量(tot_wast),并避免由于木板重复导致的无效计算,以及从大到小尝试需要的木板,可以有效优化搜索过程,快速找到解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Executing...
   Test 1: TEST OK [0.005 secs, 3392 KB]
   Test 2: TEST OK [0.005 secs, 3392 KB]
   Test 3: TEST OK [0.008 secs, 3392 KB]
   Test 4: TEST OK [0.097 secs, 3392 KB]
   Test 5: TEST OK [0.005 secs, 3392 KB]
   Test 6: TEST OK [0.062 secs, 3392 KB]
   Test 7: TEST OK [0.005 secs, 3392 KB]
   Test 8: TEST OK [0.011 secs, 3392 KB]
   Test 9: TEST OK [0.030 secs, 3392 KB]
   Test 10: TEST OK [0.005 secs, 3392 KB]
   Test 11: TEST OK [0.005 secs, 3392 KB]
   Test 12: TEST OK [0.008 secs, 3392 KB]

All tests OK.


二分答案! 我真的没想到,看了nocow的题解。


把need从小到大排序


1、假设前k个need可以得到,那么首先可以知道前k个need木板的总和,也就可以计算出需要浪费的木板总量tot_wast。

因为已经精确到要浪费的总量了,某个切割方案让浪费的总量超过tot_wast,显然是无解的


2、因为只有128种数字,却有1000多木板,所以各种木板是重复的大小,这就有一个搜索次序的情况了。 比如有2个need木板都是5,5.

在当前的give的木板上,我切后一块,不要前一块。 这样会造成大量的重复运算,所以需要用一些方法来处理掉这些多余的计算量。


3、尝试要哪些need的时候,要从大到小! 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值