http://codevs.cn/problem/2541/
这写法非常好
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[20],ida,vis[1005];
bool dfs(int i)
{
if(a[i]==n)
return 1;
if(i==ida)
return 0;
int jian=0;
for (int j=0;j<=i;j++)
jian=max(a[j],jian);
if ((jian<<(ida-i))<n)
return 0;
for(int j=i;j>=0;j--)
{
a[i+1]=a[i]+a[j];
if(dfs(i+1))
return 1;
a[i+1]=a[i]-a[j];
if(dfs(i+1))
return 1;
}
return 0;
}
int solve(int n)
{
a[0]=1;
for (ida=0;;ida++)
if (dfs(0))
return ida;
}
int main()
{
cin>>n;
cout<<solve(n);
}