take off~~~ 2024-05-03 14:27 采纳率: 0%
浏览 2
已结题

蓝桥oj3931,请问我错在哪里

img

img

我的代码如下:

img

其中hurt表示每次星辰能量给出的伤害,dfs函数的思路是敌方一个随从生命值减少后,检查每个随从的生命是否都小于0,即cnt==n,如果是说明此方案可行,answer++,

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-03 14:27
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的代码来看,我发现了一些逻辑错误和未定义行为,这可能是导致你的程序未能正确解决问题的原因。下面是修改后的代码,我将逐点解释修改的部分:

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 10;
    int t, n, a[N], answer;
    
    // 修改了dfs函数的参数列表和实现逻辑
    void dfs(int currentHurt, int totalHurt) {
        // 如果已经考虑完所有伤害等级且所有随从都被击败
        if (totalHurt == 0 && all_of(a + 1, a + 1 + n, [](int x) { return x <= 0; })) {
            answer++;
            return;
        }
        
        // 如果当前伤害等级不足以击败任何剩余血量的随从,直接返回
        if (currentHurt <= 0) return;
        
        for(int i = 1; i <= n; i++) {
            // 尝试对第i个随从应用当前伤害
            if (a[i] > 0) {
                int temp = a[i]; // 保存原始血量,以便回溯
                a[i] -= currentHurt;
                if (a[i] <= 0) { // 如果随从被击败,递归尝试下一个伤害等级
                    dfs(currentHurt - 1, totalHurt - 1);
                }
                a[i] = temp; // 回溯,恢复随从原始血量
            }
        }
    }
    
    int main() {
        cin >> t;
        while(t--) {
            cin >> n;
            for(int i = 1; i <= n; i++) cin >> a[i];
            answer = 0;
            dfs(5, 5); // 初始伤害为5,总共需要递减5次
            cout << answer << endl;
            answer = 0; // 清零answer,准备处理下一组数据
        }
        return 0;
    }
    

    解释修改点

    1. dfs函数参数修改:原代码中仅用hurt表示当前伤害,但未明确指出总共考虑了多少次伤害(即递减次数)。我增加了totalHurt参数来跟踪递减次数,确保当递减到0次时检查所有随从是否都被击败。

    2. 逻辑判断优化:在递归结束条件中使用C++标准库中的all_of函数,更简洁地判断所有随从是否都被击败。

    3. 避免重复递归:在对每个随从尝试伤害之前,先检查当前伤害是否还有意义(即currentHurt > 0),否则直接返回,避免无效递归。

    4. 回溯:在尝试对某个随从施加伤害之后,必须回溯,恢复该随从的原始血量,这样可以正确地探索所有可能的方案而不影响后续的决策。

    5. 主函数调用dfs修正:在主函数中调用dfs(5, 5),明确指出初始伤害是5,并且总共需要递减5次。

    通过以上修改,你的代码应该能够正确计算出“星辰能量”能击败所有敌方随从的方案数。请尝试运行修改后的代码并检查结果是否符合预期。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月3日
  • 创建了问题 5月3日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?