题目链接:Sticks
问题描述:
代码:
//dfs回溯 剪枝
#include<bits/stdc++.h>
using namespace std;
#define maxn 65
int n, sum, goal;
int stick[maxn];
bool visit[maxn];
bool cmp(const int &a, const int &b)
{
return a > b;
}
bool dfs(int now, int index, int cnt)
{
if(goal * cnt == sum) return true;
for(int i = index; i < n; i++)
{
if(visit[i] || (i && !visit[i-1] && stick[i] == stick[i-1]))
continue;
if(now + stick[i] == goal)
{
visit[i] = true;
if(dfs(0, 0, cnt +