#L0506. 三维递归函数求值

三维递归函数求值

题目描述

给定一个递归函数 w(a,b,c)w(a,b,c),其定义如下:

  • a0a \le 0b0b \le 0c0c \le 0,则返回 11
  • a>20a \gt 20b>20b \gt 20c>20c \gt 20,则返回 w(20,20,20)w(20,20,20)
  • a<ba \lt bb<cb \lt c,则返回 w(a,b,c1)+w(a,b1,c1)w(a,b1,c)w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)
  • 其它情况,返回 $w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)$。

这个递归函数虽然定义简洁,但直接实现效率很低。例如当 a,b,ca,b,c 均为 1515 时,递归调用次数极多。你需要采用高效的方法来计算。

注意:例如 w(30,1,0)w(30,-1,0) 同时满足条件 11 和条件 22,应按最先匹配的条件(条件 11)计算,结果为 11

输入格式

输入包含若干行,每行三个整数 a,b,ca, b, c

1,1,1-1, -1, -1 结束输入。

输出格式

对每组输入输出一行,格式为:

w(a, b, c) = ans

注意 a,b,ca, b, c 和等号两侧各有一个空格。

样例

1 1 1
2 2 2
-1 -1 -1
w(1, 1, 1) = 2

w(2, 2, 2) = 4

</p>

提示

数据规模与约定

  • 保证输入的整数在 [9223372036854775808,9223372036854775807][-9223372036854775808, 9223372036854775807] 范围内。
  • 不包括终止行 1,1,1-1, -1, -1 的输入行数 TT 满足 1T1051 \le T \le 10^5

提示

由于 a,b,ca, b, c 超过 2020 时均被截断为 2020,实际计算范围为 [0,20][0,20],可以使用记忆化搜索(三维数组缓存)将时间复杂度降至 O(1)O(1) 每次查询。

难度 普及-
通过率
尝试 0
已通过 0
ID
1234
类型
传统题
Time Limit
1000ms
Memory Limit
125MiB
上传者