在recurrence
时如何解决0 <= N <= 1,000,000,000
关系。
对于示例,
like d[N] = d[N-1] + d[N-2] * 3d[N-3]
我尝试使用DP
和memorization
解决问题,但是N范围太大而无法制作数组。输入N是随机的。
有没有其他算法可以解决这个问题?
答案 0 :(得分:2)
您只需要记住3个先前的值。因此,制作一个大小为3
的数组,并将彼此覆盖,以进行进一步处理。
int[] memo = new int[3];
// some initializations etc
for(....){
int new_value = memo[2] + memo[1] * 3 * memo[0];
memo[0] = memo[1];
memo[1] = memo[2];
memo[2] = new_value;
}
// further processing