JZOJ1417. 数学题(2017.8总结)

来源:互联网 发布:淘宝规则名词解释 编辑:程序博客网 时间:2024/06/07 10:48

Description

  当Alice在浏览数学书时,看到一个等式A=S,奇怪的是A和S并不相等。Alice发现可以通过在A中添加加号“+”从而使得等式成立。
  编程计算最少需要插入多少加号使得等式成立。允许每个数有多个前导0。

Input

  输入第一行包含一个等式形式为A=S。
  A和S都是没有前导0的正整数,并保证不相同。
  A最多有1000位。
  S<=5000。
  输入保证有解。

Output

  输出最少需要插入的加号数量。

Sample Input

输入1:
143175=120

输入2:
5025=30

输入3:
999899=125

Sample Output

输出1:
2

输出2:
1

输出3:
4

Data Constraint

Hint

【样例解释】
  样例1:14+31+75=120;样例2:5+025=30;样例3:9+9+9+89+9=125
想法:
设f[i][j]表示到第i位,和为j,最少加了多少个加号
f[k][j+z]=min{f[i][j]+1},k为i+1~n,z为i+1~k位组成的数z>s1break
然后转移O(n^2m),其实有很多前导0,这个很容易被卡
设fl[i]表示第i后面非0的第1位,n^2暴力求
然后k只用枚举fl[i]~fl[i+3],然后就可以O(nm)啦
当然也可以如果很多个0在一起,变成3个就好