給出一些木棍的長度,把這些木棍拼成長度相同的長木棍,求最短的長度。
首先對所有木棍進行降序排序,然後開始列舉,列舉下界是小木棍長度的最大值,上界是小木棍長度之和的一半。
在列舉的過程中必須進行剪枝,否則會超時。
1、當前列舉的長木棍長度不是小木棍長的和的因數時跳過。
2、與當前小木棍長度相同的小木棍沒有使用,當前小木棍也不會使用。
3、當前是拼新的長木棍的第乙個小木棍,而最後無法拼成的,直接回溯。
4、一根木棍補足長木棍剩餘所需長度,而最後無法拼成的,直接回溯。
#include#include#includeusing namespace std;
const int maxn=1010;
int a[maxn],n,len,num;
bool vis[maxn];
bool cmp(int a,int b)
bool dfs(int l,int cur,int cnt){
if(cnt==num) return true;
for(int i=cur;i
紫書刷題 UVA 712 S樹 S Trees
題目 我想用題目中給出的第二組輸入為例。3 x3 x1 x2 00010011 4000 010111 110000可以看做二進位制數000,可以轉化為十進位制的0,00010011中的第0位就是答案0 010可以看做二進位制數001,可以轉化為十進位制的1,00010011中的第1位就是答案0 1...