debug
原始文件为 cpp 代码,本文是转换后的 Markdown 文件。
#include <bits/stdc++.h>
using namespace std;
int n, maxd;
vector <int> now_have;
int pre[30];
bool vis[1030];
bool dfs(int dep)
{
printf("dfs(%d), maxd = %d\n", dep, maxd);
if (dep == maxd) return vis[n];
int now = now_have[now_have.size() - 1];
printf("now_have[last] = %d\n", now_have[now_have.size() - 1]);
if (now * pre[maxd - dep] < n) return false;
for (auto element : now_have)
{
int temp = element + now;
printf("now_have[last] = %d\n", now_have[now_have.size() - 1]);
printf("element = %d\n", element);
if (temp < 1030 && !vis[temp])
{
now_have.push_back(temp); vis[temp] = true;
if(dfs(dep+1)) return true;
now_have.pop_back(); vis[temp] = false;
}
temp = now - element;
if (temp > 0 && !vis[temp])
{
printf("temp = %d\n", temp);
now_have.push_back(temp); vis[temp] = true;
if(dfs(dep+1)) return true;
now_have.pop_back(); vis[temp] = false;
}
}
return false;
}
void init()
{
now_have.clear(); now_have.push_back(1);
pre[0] = 1; for(int i = 1; i < 30; ++i) pre[i] = pre[i-1] << 1;
memset(vis, false, sizeof(vis)); vis[1] = true;
}
int main()
{
freopen("in.txt", "r", stdin);
while (scanf("%d", &n))
{
if(!n) break;
init();
for (maxd = 0; ; ++maxd)
{
if (dfs(0))
{
printf("%d\n", maxd);
break;
}
}
}
return 0;
}