【发布时间】:2012-07-03 07:11:48
【问题描述】:
我有以下递归函数:
typedef unsigned long long ull;
ull calc(ull b, ull e)
{
if (!b) return e;
if (!e) return b;
return calc(b - 1, e - 1) + calc(b - 1, e) - calc(b, e - 1);
}
我想用动态编程(即使用存储)来实现它。我曾尝试使用map<pair<ull, ull>, ull>,但它也太慢了。我也无法使用数组O(1) 来实现它。
我想找到一个解决方案,以便此函数可以快速解决大型b, es。
【问题讨论】:
-
我不确定我的问题是否正确,所以你能澄清一下你到底想要什么:你想摆脱递归,还是只想改变你的存储方式数据?
-
@SingerOfTheFall 我理解递归,但我想加快这个函数的速度
-
明显的优化是使用缓存,可能实现为哈希映射。
-
你不能这样做吗 DP[0][e] = e DP[b][0] = b 然后 DP[b][e] = DP[b-1] [e-1] + DP[b-1][e] - DP[b][e-1]
-
@sukunrt 那么DP[0][0]的值是多少??
标签: c++ c algorithm dynamic-programming memoization