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的时候,要从大到小!