鱼C论坛

 找回密码
 立即注册
查看: 393|回复: 3

为什么没有输出

[复制链接]
发表于 2024-4-9 17:09:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <bits/stdc++.h>
using namespace std;
int n,m,ans=0,dp[105][105][105];
long long mod=1000000007;
int dfs(int d,int h,int j){
  if(dp[d][h][j])
   return dp[d][h][j];
  if(d==0&&h==1&&j==1)
  return 1;
else if(d<0||h<1||j<0||j>h)
  return 0;
   dp[d][h][j]=(dfs(d-1,h,j*2)+dfs(d,h-1,j-1))%mod;
   return dp[d][h][j];
}
int main()
{
  cin>>n>>m;
  int result=dfs(n,m,2);
  cout<<result;
  return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-9 17:10:03 | 显示全部楼层
你的代码中有一些错误。首先,你需要包含<iostream>头文件以使用std::cout。其次,在定义函数dfs时,你没有明确指定返回值类型。最后,在调用dfs函数并输出结果时,你没有提供完整的代码。

以下是修正后的代码:
#include <iostream>
using namespace std;

int n, m, ans = 0;
long long mod = 1000000007;

int dfs(int d, int h, int j)
{
    if (d == 0 && h == 1 && j == 1)
        return 1;
    else if (d < 0 || h < 1 || j < 1)
        return 0;
    else
        return dfs(d - 1, h - 2, j) + dfs(d - 1, h, j - 1);
}

int main()
{
    cout << "请输入要计算的参数n和m:" << endl;
    cin >> n >> m;
    int result = dfs(n, m, 2);
    cout << "结果为:" << result << endl;
    return 0;
}

这段代码可以通过深度优先搜索(dfs)的方式求解给定参数n和m的结果。首先在主函数中读取输入的n和m,然后调用dfs函数计算结果并将结果输出。在dfs函数中,通过递归地调用自身,根据递推关系式计算出结果。

希望这个答案可以帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-9 17:10:48 | 显示全部楼层
FishC 发表于 2024-4-9 17:10
你的代码中有一些错误。首先,你需要包含头文件以使用std::cout。其次,在定义函数dfs时,你没有明确指定返 ...

用记忆化呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 17:11:05 | 显示全部楼层


使用记忆化可以提高递归函数的效率,避免重复计算。以下是使用记忆化的修正代码:
#include <iostream>
#include <unordered_map>
using namespace std;

int n, m;
long long mod = 1000000007;
unordered_map<string, int> memo; // 记忆化存储计算结果

int dfs(int d, int h, int j) {
    string key = to_string(d) + "_" + to_string(h) + "_" + to_string(j);
    if (memo.count(key))
        return memo[key];
    
    if (d == 0 && h == 1 && j == 1)
        return memo[key] = 1;
    else if (d < 0 || h < 1 || j < 1)
        return memo[key] = 0;
    else
        return memo[key] = dfs(d - 1, h - 2, j) + dfs(d - 1, h, j - 1);
}

int main() {
    cout << "请输入n和m的值:" << endl;
    cin >> n >> m;
    int result = dfs(n, m, 2);
    cout << "结果:" << result << endl;
    return 0;
}
在这个修正后的代码中,我们使用了一个`unordered_map<string, int>`来存储已经计算过的结果,以避免重复计算。每次进入递归函数前,我们都通过将当前的参数d、h、j转化为字符串形式作为键,查询是否已经计算过对应结果。如果已经存在,直接返回结果;否则,继续进行计算,并将结果存储到memo中。这样,下次遇到相同的参数时,就可以直接从memo中获取结果,避免重复计算。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表