推公式的能力需要锻炼。。

/*
dp的时候要存结构体
里面三个元素:
cnt,就是满足条件的个数
sum1,就是满足条件的数字和
sum2,满足条件的数字平方和
推导过程:还是用记忆化搜索模板
dp[pos][mod1][mod2]:后pos位模7=mod1,数位和模7=mod2的状态
设当前状态cur
枚举当前位i,碰到7跳过
求出后pos-1位的状态nxt
这里需要建立当前数的模型:
设x是后pos-1位的数:i*10^len+x;
cur.cnt+=nxt.cnt;
cur.sum1+=nxt.sum1+nxt.cnt*(i*10^(pos-1))
cur.sum2+=sum{ (i*10^len+x)^2 }= sum{ (i*10^len)^2 }+sum{ x^2 }+sum{ 2*x*i*10^len }
化简上式:sum{ x^2 }=nxt.sum2,
sum{ 2*x*i*10^len }=nxt.sum1*2*i*10^len
sum{ (i*10^len)^2 }=nxt.cnt*(i*10^len)
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
struct Node{
ll cnt,sum1,sum2;
Node(){cnt=-;sum1=sum2=;}
Node(ll cnt,ll sum1,ll sum2):cnt(cnt),sum1(sum1),sum2(sum2){}
}dp[][][];
ll a[],f[];
Node dfs(ll pos,ll mod1,ll mod2,ll lim){
if(pos<=) return mod1&&mod2?Node(,,):Node(,,);//% 7 ≠0 即可
if(!lim && dp[pos][mod1][mod2].cnt!=-)return dp[pos][mod1][mod2];
int num=lim?a[pos]:;
Node cur;cur.cnt=;
for(int i=;i<=num;i++){
if(i==)continue;
Node nxt=dfs(pos-,(mod1*+i)%,(mod2+i)%,lim&&i==num);
cur.cnt=(cur.cnt+nxt.cnt)%mod;
cur.sum1=((cur.sum1+nxt.sum1)%mod+nxt.cnt*(i*f[pos]%mod)%mod)%mod;
ll tmp1=nxt.sum1*%mod*i%mod*f[pos]%mod;
ll tmp2=nxt.cnt*(i*f[pos]%mod)%mod*(i*f[pos]%mod)%mod;
cur.sum2=((cur.sum2+nxt.sum2)%mod+(tmp1+tmp2%mod)%mod)%mod;
}
if(!lim)dp[pos][mod1][mod2]=cur;
return cur;
}
ll query(ll x){
int len=;
while(x){a[++len]=x%;x/=;}
return dfs(len,,,).sum2;
}
int main(){
f[]=;for(int i=;i<=;i++)f[i]=f[i-]*%mod;
ll A,B,t;cin>>t;
while(t--){
cin>>A>>B;
cout<<(query(B)-query(A-)+mod)%mod<<endl;
}
}

hdu4507 数位dp+推公式的更多相关文章

  1. sgu495:概率dp / 推公式

    概率题..可以dp也可以推公式 抽象出来的题目大意: 有 n个小球,有放回的取m次  问 被取出来过的小球的个数的期望 dp维护两个状态 第 i 次取出的是 没有被取出来过的小球的 概率dp[i] 和 ...

  2. SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495 题意: 有n个礼物盒,m个人. 最开始每个礼物盒中都有一个礼物. m个人依次随 ...

  3. Codeforces 288E - Polo the Penguin and Lucky Numbers(数位 dp+推式子)

    题目传送门 似乎我的解法和官方题解不太一样 纪念自己独立做出来的一道难度 2800 的题. 我们记 \(ans(x)\) 为 \([444...44,x]\) 的答案,显然答案为 \(ans(r)-a ...

  4. HDU 4661 Message Passing ( 树DP + 推公式 )

    参考了: http://www.cnblogs.com/zhsl/archive/2013/08/10/3250755.html http://blog.csdn.net/chaobaimingtia ...

  5. hdu4507(数位DP)

    题目意思: 给定一个区间,求这段区间中,不含7,对7取余为0,各个位数相加之和对7取余为0的数的平方和. 设d[i][j][k][m]代表长度为i的,对7取余为j的,各个位数相加之和对7取余为k的数的 ...

  6. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  7. HDU4507 吉哥系列故事——恨7不成妻 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题目大意: 找到区间 \([L,R]\) 范围内所有满足如下条件的数的 平方和 : 不包含'7' ...

  8. HDU-4507 吉哥系列故事——恨7不成妻 数位DP

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

  9. 递推、数位DP解析(以HDU 2089 和 HDU 3555 为例)

    HDU 2089 不要62 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2089 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人 ...

随机推荐

  1. 【学习总结】Git学习-参考廖雪峰老师教程-总

    公元2018-10-21 实验室台式机 win7 64位 参考教程: 廖雪峰Git教程 其他资料:Git-book 北大一只总结的笔记,最终整理的时候可以参考:Git笔记 评论区看到的另一个人,总结在 ...

  2. MySQL8.0-NoSQL和SQL的对比及MySQL的优势

    一.SQL VS NoSQL SQL:关系型数据库,用SQL语句来操作数据 NOSQL:非关系型数据库,NoSQL的含义是不仅仅有SQL,而实际上大多数NoSQL不用SQL来操作数据 常见的关系型数据 ...

  3. 在线解析JSON+ AsyncTaskLoader

    效果图: 获取并解析Json package com.example.admin.quakereport; import android.text.TextUtils;import android.u ...

  4. koa-session 记录当前会话内容

    最近做毕设需要在nodejs服务器下记录当前用户账号,所用的node框架是koa,所以相对应配套的用了koa-session,发现和之前学的session差不多,都是会话级别的. 一.session和 ...

  5. Git submodule - 子模块【转】

    子模块 有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使 ...

  6. 帝国cms更新报错解决办法

    帝国cms更新,经常会报以下的错误: PHP Warning:  array_merge(): Argument #2 is not an array in D:\wwwroot\www.536831 ...

  7. [M$]重装或更换主板后提示“由于指定产品密钥激活次数“ office 2016

    https://answers.microsoft.com/zh-hans/msoffice/forum/all/%E6%8C%87%E5%AE%9A%E4%BA%A7%E5%93%81%E5%AF% ...

  8. Vue的钩子函数[路由导航守卫、keep-alive、生命周期钩子]

    前言 说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究过,且Vue的生命周期在面试中也算是比 ...

  9. win32: 文本编辑框(Edit)控件响应事件

    过去几年,关于文本编辑框(Edit)控件的响应事件,我都是在主程序 while(GetMessage(&messages, NULL, 0, 0)) { ... } 捕获. 总感觉这种方式让人 ...

  10. 使用svn进行协作开发

    环境 操作系统:win7 64位 所需工具 1. 服务器端(Subversion)[Setup-Subversion-1.8.16.msi] 2. 客户端(TortoiseSVN)[TortoiseS ...