为什么没有输出
#include <bits/stdc++.h>using namespace std;
int n,m,ans=0,dp;
long long mod=1000000007;
int dfs(int d,int h,int j){
if(dp)
return dp;
if(d==0&&h==1&&j==1)
return 1;
else if(d<0||h<1||j<0||j>h)
return 0;
dp=(dfs(d-1,h,j*2)+dfs(d,h-1,j-1))%mod;
return dp;
}
int main()
{
cin>>n>>m;
int result=dfs(n,m,2);
cout<<result;
return 0;
} 你的代码中有一些错误。首先,你需要包含<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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-9 17:10
你的代码中有一些错误。首先,你需要包含头文件以使用std::cout。其次,在定义函数dfs时,你没有明确指定返 ...
用记忆化呢
yueyufeng 发表于 2024-04-09 17:10
用记忆化呢
使用记忆化可以提高递归函数的效率,避免重复计算。以下是使用记忆化的修正代码:
#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;
if (d == 0 && h == 1 && j == 1)
return memo = 1;
else if (d < 0 || h < 1 || j < 1)
return memo = 0;
else
return memo = 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 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]