思路  和普通的DP不一样的是 这里求的是满足条件的数的平方的和 而数位DP只跟数每位是什么密切相关  所以要开一个结构 (多加一个 数的和sum 和平方和qsum)存一下各个状态的和的情况

dp[pos][state1][state2].num  满足该状态的数有几个

dp[pos][state1][state2].sum 满足该条件的数的和是多少

dp[pos][state1][state2].qsum 满足该条件的数的平方的和是多少

详见注解 主要是状态转移是 和 和 平方和 的转移公式

∑(Y + xi)^2 = ∑(Y^2 + 2 * Y * xi + xi^2) = n * Y^2 + 2 * Y * ∑xi + ∑ xi^2  利用该公式 可以实现 状态转移

tips:先写好公式再疯狂% 不然容易乱

参考:https://blog.csdn.net/qq_37025443/article/details/78472991

#include <cstdio>
#include <cmath>
#include <algorithm>
#include<vector>
#include<iostream>
#include<cstring>
using namespace std;
const long long MOD=(1e9)+;
typedef long long ll;
ll sum;
int cnt;
ll a[];
int t[];
struct Node{
ll num,sum,qsum;
Node(ll a=,ll b=,ll c=):num(a),sum(b),qsum(c){ }
}dp[][][]; ll c[];
void init(){
c[]=;
for(int i=;i<=;i++)c[i]=(c[i-]*)%MOD;
} Node dfs(int pos,int state1,int state2,bool limit ){
if(pos==-){
return Node(state1&&state2,,);
}
if(!limit&&dp[pos][state1][state2].qsum!=)return dp[pos][state1][state2];
int up=limit?a[pos]:;
Node ans;
for(int i=;i<=up;i++){
// cout<<i<<endl;
if(i==)continue;
Node tmp=dfs(pos-,(state1+i)%,(state2*+i)%,limit&&i==up);
// cout<<111<<endl;
ans.num=(ans.num+tmp.num)%MOD;//满足的数求和
ans.sum=(ans.sum+(((i*c[pos])%MOD*tmp.num)%MOD+tmp.sum)%MOD)%MOD;//tmp.num*i*c[pos] 表示当前位pos的数的大小 乘以 一共有多少个满足条件数 tmp.sum表示pos-1的数的和
ans.qsum+=((tmp.qsum+(*i*c[pos])%MOD*tmp.sum)%MOD)%MOD;// 平方和公式实现状态转移 tmp.qsum 就是a^2 2*i*c[pos]*tmp.sum 就表示 2*a*b
ans.qsum%=MOD;
ans.qsum+=(((i*c[pos]*i)%MOD*c[pos])%MOD*tmp.num)%MOD;// i*i*c[pos]*c[pos] b^2 由上面的注解可以知道还需要求和 (n就是tmp.num)
ans.qsum%=MOD; }
if(!limit) dp[pos][state1][state2]=ans;
return ans;
} ll solve(ll x){
int pos=;
while(x){
a[pos++]=x%;
x/=;
}
return dfs(pos-,,,).qsum;
} int main()
{
ll a,b;
int t;
cin>>t;
int kase=;
init();
while(t--){
cin>>a>>b;
printf("%I64d\n",(solve(b)-solve(a-)+MOD)%MOD);
} return ;
}

吉哥系列故事――恨7不成妻 HDU - 4507 数位dp的更多相关文章

  1. Day9 - J - 吉哥系列故事——恨7不成妻 HDU - 4507

    单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=7*2 77=7 ...

  2. 吉哥系列故事――恨7不成妻 HDU - 4507

    题目: 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=7*2 ...

  3. [HDU4507]吉哥系列故事——恨7不成妻

    [HDU4507]吉哥系列故事--恨7不成妻 试题描述 单身!依然单身!吉哥依然单身!DS级码农吉哥依然单身!所以,他生平最恨情人节,不管是214还是77,他都讨厌!吉哥观察了214和77这两个数,发 ...

  4. 吉哥系列故事——恨7不成妻(数位DP)

    吉哥系列故事——恨7不成妻 http://acm.hdu.edu.cn/showproblem.php?pid=4507 Time Limit: 1000/500 MS (Java/Others)   ...

  5. 吉哥系列故事——恨7不成妻(数位dp)

    吉哥系列故事--恨7不成妻 传送门 Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥 ...

  6. B - 吉哥系列故事——恨7不成妻

    单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=72 77=71 ...

  7. HDU - 4507 - 吉哥系列故事——恨7不成妻(数位DP,数学)

    链接: https://vjudge.net/problem/HDU-4507 题意: 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都 ...

  8. hdu4507吉哥系列故事——恨7不成妻 (数位dp)

    Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: ...

  9. HDU 4507 吉哥系列故事——恨7不成妻

    需要推下平方和的式子..维护个数,和,平方和. #include<iostream> #include<cstdio> #include<cstring> #inc ...

随机推荐

  1. .net core实践系列之短信服务-架构设计

    前言 上篇<.net core实践系列之短信服务-为什么选择.net core(开篇)>简单的介绍了(水了一篇).net core.这次针对短信服务的架构设计和技术栈的简析. 源码地址:h ...

  2. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

    作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 萌芽阶段 很久之前就开始打算整理一下自己的技术博客了,由于各种原因(借口 ...

  3. Centos7之Systemd(Service文件)详解

    一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下面的命令(以httpd. ...

  4. 多项式求值 n维多项式 Horner解法

    #include<iostream> using namespace std; template<class T> T ploy(T *coeff,int n,const T& ...

  5. (第十三周)评论Final发布I

    本人所在组:奋斗吧兄弟 按课上展示的顺序对每组进行点评: 1.  Nice 项目:约跑软件 展示的时候使用了摄像头投影,提高了演示效果,软件的背景进行了美化,表现好了很好.解决了我们组提出的文字多挤没 ...

  6. 培训班课程课时及费用管理系统V3.0,适合钢琴培训班、艺术培训班等

    联系QQ 564955427. ACM3.02 文件下载                    还有: 预收课时版 特点: 1. 适合主要业务是一对一课程和部分集体课培训的中小培训班(非连锁管理).考 ...

  7. 快速失败/报错机制 - fail-fast

    一.快速报错机制(fail-fast) 这是<Java编程思想>中关于快速报错机制的描述 Java容器有一种保护机制,能够防止多个进程同时修改同一个容器的内容.如果在你迭代遍历容器的过程中 ...

  8. 转:Linux下查看tomcat占用端口

    https://blog.csdn.net/liufuwu1/article/details/71123597[root@server-crm mysql]# ps -ef | grep " ...

  9. react-router的坑

    componentWillReceiveProps(nextProps){ 在改钩子函数里接受组件变化的最近的传递的props 如果在这里没有使用nextprops 而是调用this.props 会出 ...

  10. mybatis插入数据并返回自增Id

    上图mybatis的写法,在xxxMapper.xml中: 加入:useGeneratedKeys="true" keyProperty="applyId" k ...