Skip to content

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;
}