题目分析
- 要自动滤掉大于50的长度… 心中********
已开启自动过滤 - 剩下的,纯暴搜: 就是枚举原始木棍长度,然后试着拼
疯狂剪枝
- 剪枝1:排序,剪枝的根本(正序倒序无所谓,别人都是倒序,就我是正序)+计算木棍长度总和
- 剪枝2:由于原始木棍一定大于等于当前最大的木棍,所以从当前最大的木棍开始枚举原始木棍长度。枚举到木棍长度总和。(还可以有一个小优化,见代码)
- 剪枝3:如果搜到答案直接退出
这不是废话吗 - 剪枝4:感谢排序,如果当前长度的木棍不能搜到答案,那么后面等长的木棍也不行。
- 剪枝5:再次感谢排序,我们可以把当前木棍的编号传下去,下一次搜更短的即可。
代码
#include<bits/stdc++.h>
using namespace std;
int n,s,m,u[1001],l,a[1001],ans,sum;
inline void check(int last,int t,int k){
if(ans) return;
if(t==s){
ans=l;
return;
}
for(