【数位DP】 HDU 4507 吉哥系列故事——恨7不成妻

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4507

题意:给定区间[L, R]求区间内与7无关数的平方和。一个数当满足三个规则之一则认为与7有关:
  1、整数中某一位是7;
  2、整数的每一位加起来的和是7的整数倍;
  3、这个整数是7的整数倍;

思路:dp[i][j][k],数位和模7余j,前面的和模7余k,一般的状态只能记录他有多少种方案,这里求平方和,那就只要记录前面的方案数,和,平方和,就能得到当前的状态了。递推见下面:

  现在的和:i*10^p+x1+i*10^p+x2+.....=i*10^p*pre.n+(x1+x2+...xn)=i*10^p*pre.n + pre.sum

  现在的平方和:(i*10^p+x1)^2+(i*10^p+x2)^2+(i*10^p+x3)^2+...=(i*10^p)^2*pre.n + 2*i*10^p*(x1+x2+...xn) + (x1^2+x2^2+...xn^2)

                                     =(i*10^p)^2*pre.n + 2*i*10^p*pre.sum + pre.power       

代码:https://github.com/Mithril0rd/Rojo/blob/master/hdu4507.cpp

TAG:转换思想,数D。

posted @ 2014-11-01 10:19  mithrilhan  阅读(164)  评论(0编辑  收藏  举报