HDU 4507 吉哥系列故事——恨7不成妻 (比较繁琐的数位DP)

来源:互联网 发布:淘宝搜索排名黑科技 编辑:程序博客网 时间:2024/06/05 20:28

题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=4507

题意 :找出[l, r]之间所有不满足以下任意一条的数的平方之和 :

    1、整数中某一位是7;
    2、整数的每一位加起来的和是7的整数倍;
    3、这个整数是7的整数倍;

思路 : 数位DP, 繁琐的是处理平方和,可以这样考虑当你算到len位的时候获得的数字是x,然后下一位放进去的数字是i,那么其实所获得的新的值应该是x + i * 10 ^ (len-1), 然后要计算它的平方, 那么展开后就是  x * x + f * f + 2 * f * x ;(f = i * 10 ^ (len - 1)),这样的话需要统计在前继状态中获得的所有满足条件的数的个数cnt, 所有满足条件的数的和s1, 所有满足条件的数的平方和s2.然后用GYZ的数位DP写法秒了, 注意下别溢出即可。

PS : 一开始打算是把当前算到的位置所获得数字平方和传进去, 但是空间更本就是开不下的。看了爱神(cxlove)的blog才发现原来可以倒的把数据返回来, 这样就不需要担心爆内存了。