#10504. 火柴棒等式【NOIP2008 提高组】

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Turing001

题目描述

给你 n 根火柴棍,你可以拼出多少个形如 A+B=C 的等式?等式中的 A B C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0 )。用火柴棍拼数字 0\sim9 的拼法如图所示:

注意:

  1. 加号与等号各自需要两根火柴棍;

  2. 如果 A\neq B ,则 A+B=C B+A=C 视为不同的等式( A,B,C\geq0 );

  3. n 根火柴棍必须全部用上。

输入格式

一个整数 n(1 \leq n\leq 24)

输出格式

一个整数,能拼成的不同等式的数目。

样例

样例输入 #1

14

样例输出 #1

2

样例输入 #2

18

样例输出 #2

9

【输入输出样例 1 解释】

2 个等式为 0+1=1 1+0=1

【输入输出样例 2 解释】

9 个等式为

0+4=4 0+11=11 1+10=11 2+2=4 2+7=9 4+0=4 7+2=9 10+1=11 11+0=11

数据范围与提示

【问题提示】 首先,预处理每个数字(0~9)需要用几根火柴棒,存储在数组 f 中。
然后,穷举 a 和 b,算出它们的和 c,再判断下列约束条件是否成立:f (a)+ f (b)+ f (c)= n-4。
现在的问题是:a 和 b 的范围有多大?可以发现尽量用数字 1 拼成的数比较大,分析可知最多不会超过 1111。
程序实现时,分别用循环预处理好所有两位数、三位数、四位数构成所需要的火柴棒数量。