博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDU4507】恨7不成妻(数位DP)
阅读量:5103 次
发布时间:2019-06-13

本文共 1668 字,大约阅读时间需要 5 分钟。

大致题意: 让你求出一段区间内与\(7\)无关的数的平方和。与\(7\)无关的数指整数中任意一位不为\(7\)整数的每一位加起来的和不是\(7\)的整数倍这个整数不是\(7\)的倍数

数位\(DP\)

这题应该比较显然是一道 题。

如何记录状态

这道题关键就在于如何记录状态,其余的就和普通的数位\(DP\)差不多了。

我们可以用\(f_{x,s1,s2}\)来表示还剩\(x\)位,这个数除末\(x\)位以外模\(7\)\(s1\),这个数每一位之和除末\(x\)位以外模\(7\)\(s2\)时所有与\(7\)无关的数的\(x\)的平方和。

但是,如果光光记录平方和,转移就有点困难了。

所以,我们先要来一点恶心的数学转化。

数学转化

让我们来研究一下\((x_1+t*10^y)^2+(x_2+t*10^y)^2+...+(x_n+t*10^y)^2\)这个式子。

先由完全平方公式可得:

\[原式=(x_1^2+2*x_1*t*10^y+10^{2y})+(x_2^2+2*x_2*t*10^y+10^{2y})+...+(x_n^2+2*x_n*t*10^y+10^{2y})\]

然后,我们将其去括号并重新组合,可得:

\[原式=(x_1^2+x_2^2+...+x_n^2)+2*t*10^y*(x_1+x_2+...+x_n)+(t*10^y)^2*n\]

如果用\(f(n)\)来表示\(x_1+x_2+...+x_n\)\(f^2(n)\)来表示\(x_1^2+x_2^2+...+x_n^2\),则:

\[原式=f^2(n)+2*t*10^y*f(n)+(t*10^y)^2*n\]

我们可以预处理出\(10^y\),并对于每个状态记录下\(n,f(n)\)\(f^2(n)\),这样就可以实现\(O(1)\)转移了。

状态转移方程

\(ns1\)来表示\((s1*10+i)\)%\(y\)\(ns2\)来表示\((s2+i)\)%\(y\)

\[n_{x,s1,s2}=\sum_{i=0}^{lim}n_{x-1,ns1,ns2}\]

\[f_{x,s1,s2}=\sum_{i=0}^{lim}f_{x-1,ns1,ns2}+n_{x-1,ns1,ns2}*i*10^{x-1}\]

\[f^2_{x,s1,s2}=\sum_{i=0}^{lim}f^2_{x-1,ns1,ns2}+2*i*10^x*f_{x-1,ns1,ns2}+(i*10^{x-1})^2*n_{x-1,ns1,ns2}\]

代码

#include
#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))#define uint unsigned int#define LL long long#define ull unsigned long long#define swap(x,y) (x^=y,y^=x,x^=y)#define abs(x) ((x)<0?-(x):(x))#define INF 1e9#define Inc(x,y) ((x+=y)>=MOD&&(x-=MOD))#define MOD 1000000007using namespace std;LL n,m;class FIO{ private: #define Fsize 100000 #define tc() (FinNow==FinEnd&&(FinEnd=(FinNow=Fin)+fread(Fin,1,Fsize,stdin),FinNow==FinEnd)?EOF:*FinNow++) #define pc(ch) (FoutSize

转载于:https://www.cnblogs.com/chenxiaoran666/p/HDU4507.html

你可能感兴趣的文章
mac npm全局依赖包变量_如何管理NPM全局包
查看>>
ubuntu mysql修改root密码_ubuntu10.10中修改mysql root用户密码的方法
查看>>
使用命令创建mysql_用命令创建MySQL数据库
查看>>
mysql的NLJ_mysql的join buffer-阿里云开发者社区
查看>>
pythonselenium说明_python+selenium方法大全
查看>>
python print(len(pi_string))_Python2和Python3中print的用法示例总结
查看>>
mysql从库上限_Mysql 主从限制数据库
查看>>
数组中的逆序对python_数组中的逆序对.md · Ainevisa/SwordAtOffer-Python - Gitee.com
查看>>
cuckoofilter java_布隆过滤器(BloomFilter)的原理、实现和探究
查看>>
java 拖拽上传_Java实现拖拽上传
查看>>
java thread dump 分析_怎样分析 JAVA 的 Thread Dumps
查看>>
java new Thread()失败_Java Thread:Run方法不能抛出已检查的异常
查看>>
java如何登陆域后直接进系统_AD域账户自动登陆(仅限IE浏览器)Java简单实现
查看>>
java 中成员_Java 中的成员内部类
查看>>
java排序算法_一遍记住 Java 常用的八种排序算法与代码实现
查看>>
java aop面试_我想知道Spring在面试中应该怎么介绍,以及如何介绍他的aop?
查看>>
kettle java获取变量_Kettle的第二个实践--数据获取并转换
查看>>
java oom产生原因_OOM 原因及解决方案总结
查看>>
java生成流水号案例_java中生成流水号的一个例子(使用关系型数据库)
查看>>
java读取键盘方向键_我想实现当按下键盘的方向键,所画的红点会随着移动,请帮忙看下下...
查看>>