【2024蓝桥杯/C++/B组/传送阵】

题目

问题代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N = 1e6+10;
int n;
int porter[N];
int ans;
int sign[N];
bool used;

void dfs(int now, int cnt)
{
    if(sign[now] && used)
    {
        ans = max(ans, cnt);
        return;
    }

    if(!sign[now])
    {
        cnt++, sign[now] = 1; 
        dfs(porter[now], cnt);
    }

    if(!used)
    {
        used = true;
        dfs(now-1, cnt);
        dfs(now+1, cnt);
        used = false;
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> n;
    for(int i = 1; i <= n ; i++) cin >> porter[i];

    for(int i = 1; i <= n; i++) dfs(i, 0);

    cout << ans;

    return 0;
}

分析

修改

我想了一下,可能是由于回溯的问题。因为我定的是全局变量sign和used,所以回溯应该要逐个回溯。而且我还忘了边界限制。修改如下

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N = 1e6+10;
int n;
int porter[N];
int ans;
int sign[N];
bool used;

void dfs(int now, int cnt)
{
    if(sign[now] && used)
    {
        ans = max(ans, cnt);
        return;
    }

    if(!sign[now])
    {
        cnt++, sign[now] = 1; 
        dfs(porter[now], cnt);
        sign[now] = 0;
    }

    if(!used)
    {
        sign[now] = 1;
        used = true;
        if(now-1 >= 1) dfs(now-1, cnt);
        //used = false;
        //sign[now] = 0;
        sign[now] = 1;
        used = true;
        if(now+1 <= n) dfs(now+1, cnt);
        used = false;
        sign[now] = 0;
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> n;
    for(int i = 1; i <= n ; i++) cin >> porter[i];

    for(int i = 1; i <= n; i++) dfs(i, 0);

    cout << ans;

    return 0;
}

再分析

可以看出原本不过的样例过了。说明修改可能正确了,但是因此也增加了时间消耗。

相关推荐
B_lack0261 天前
西门子PLC结构化编程_线性插值算法功能块
算法·pid·西门子plc·博途·线性插值·开环控制
fufu03111 天前
Linux环境下的C语言编程(四十三)
linux·c语言·算法
业精于勤的牙1 天前
三角形最小路径和(二)
算法
风筝在晴天搁浅1 天前
hot100 239.滑动窗口最大值
数据结构·算法·leetcode
夏乌_Wx1 天前
练题100天——DAY31:相对名次+数组拆分+重塑矩阵
数据结构·算法
LYFlied1 天前
【算法解题模板】-解二叉树相关算法题的技巧
前端·数据结构·算法·leetcode
Ven%1 天前
【AI大模型算法工程师面试题解析与技术思考】
人工智能·python·算法
天勤量化大唯粉1 天前
枢轴点反转策略在铜期货中的量化应用指南(附天勤量化代码)
ide·python·算法·机器学习·github·开源软件·程序员创富
爱学习的小仙女!1 天前
算法效率的度量 时间复杂度 空间复杂度
数据结构·算法
AndrewHZ1 天前
【复杂网络分析】什么是图神经网络?
人工智能·深度学习·神经网络·算法·图神经网络·复杂网络