3 条题解

  • 0
    @ 2024-4-12 14:21:45

    DFS

    最少次数,每次都要更新p数组,初始为正无穷

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    const int N = 210;
    
    int n, a, b;
    int d[N];
    int p[N];
    int flag;
    
    void dfs(int u, int level)
    {
        p[level] = u;
        if (level == b)
        {
            flag = true;
            return;
        }
        if (level + d[level] <= n && u + 1 < p[level + d[level]])
            dfs(u + 1, level + d[level]);
    
        if (level - d[level] >= 1 && u + 1 < p[level - d[level]])
    
            dfs(u + 1, level - d[level]);
    }
    
    void solve()
    {
        memset(p, 0x3f, sizeof p);
        cin >> n >> a >> b;
        for (int i = 1; i <= n; i++)
            cin >> d[i];
        dfs(0, a);
        if (flag)
            cout << p[b] << endl;
        else
            cout << -1 << endl;
    }
    
    int main()
    {
        solve();
    
        system("pause");
        return 0;
    }
    

    信息

    ID
    85
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    376
    已通过
    93
    上传者