数位dp知识
转自http://blog.csdn.net/zhaoxinfan/article/details/8707605
下面先给出数位DP的背景:
为了降低时间复杂度,可以借鉴传统DP中状态转换,打表这些思路,得到了数位DP:
F(A,B) = F(B,0)-F(A-1,0)
暴力+存储 = 记忆化搜索
针对上面几种类型的问题,数位DP解决方案如下:(具体可以看http://www.cppblog.com/Yuan/archive/2011/07/15/139299.html)
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
using namespace std;
typedef long long ll; #define mem(a,b) memset(a,b,sizeof(a)) const int L = , P = 1e9+; struct RES
{
ll all, sum, cnt;
RES() {}
RES(int i,int j,int k):all(i),sum(j),cnt(k) {}
} dp[L]; ll chkmod(ll x,ll p)
{
return (x%p+p)%p;
} int d[L], n; RES dfs(int pos, int UP)
{
if(pos<)
{
return RES(,,);
}
if(!UP && ~dp[pos].all)
{
return dp[pos];
}
RES ret(,,);
int up=UP?d[pos]:;
ret.all += dfs(pos-, UP&&up==).all;
ret.all %= P;
for(int i=;i<=up;i++)
{
int nUP = UP&&i==up;
for(int j=pos-;j>=-;j--)
{
ll tmp = dfs(j, nUP).sum + dfs(j, nUP).cnt * (pos - - j);
tmp %= P;
ret.all += tmp;
ret.all %= P;
ret.sum += tmp;
ret.sum %= P;
ret.cnt += dfs(j, nUP).cnt;
ret.cnt %= P; nUP = nUP && d[j]==; // !!!
}
} if(!UP)
{
dp[pos] = ret;
}
return ret;
} ll cal(ll x)
{
n=;
while(x)
{
d[n++]=x%;
x/=;
}
return dfs(n-,).all;
} int main()
{
mem(dp,-);
ll n;
while(cin>>n)
{
cout<<cal(n)<<endl;
}
return ;
}
数位dp知识的更多相关文章
- 数位类统计问题--数位DP
		有一类与数位有关的区间统计问题.这类问题往往具有比较浓厚的数学味道,无法暴力求解,需要在数位上进行递推等操作.这类问题往往需要一些预处理,这就用到了数位DP. 本文地址:http://www.cnbl ... 
- 数位DP+其他
		参考资料: [1]:数位dp总结 之 从入门到模板 [2]:浅谈数位DP 题目一览表 来源 考察知识点 A 4352 "XHXJ's LIS" hdu 数位DP+状压DP+LIS ... 
- 【做题】CF388D. Fox and Perfect Sets——线性基&数位dp
		原文链接https://www.cnblogs.com/cly-none/p/9711279.html 题意:求有多少个非空集合\(S \subset N\)满足,\(\forall a,b \in ... 
- [SDOI2013]淘金  数位DP
		做了好久.... 大致思路: 求出前k大的方格之和即为答案, 先考虑一维的情况,设f[i]为数位上各个数相乘为i的数的总数,也就是对于数i,有f[i]个数它们各个位相乘为i, 再拓展到二维,根据乘法原 ... 
- 【hdu3652】数位dp(浅尝ACM-A)
		向大佬学习 第一次写博客有点紧张,也算是小萌新的突破吧 这次主要是总结一下校内的ACM比赛的各种题,主要是新思路以及学到的新知识 先放一张 下面开始说正事 题面 A wqb-number, or B- ... 
- [luoguP2518][HAOI2010]计数(数位DP)
		传送门 重新学习数位DP.. 有一个思路,枚举全排列,然后看看比当前数小的有多少个 当然肯定是不行的啦 但是我们可以用排列组合的知识求出全排列的个数 考虑数位dp 套用数位dp的方法,枚举每一位,然后 ... 
- Pair(二进制处理+数位dp)(2019牛客暑期多校训练营(第七场))
		示例: 输入: 33 4 24 5 27 8 5 输出:5 7 31 题意:存在多少对<x,y>满足x&y>C或x^y<C的条件.(0<x<=A,0< ... 
- 【题解】P2602 数字计数 - 数位dp
		P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ... 
- 数位DP 学习笔记
		前言:鸣谢https://www.luogu.com.cn/blog/virus2017/shuweidp.感谢大佬orz ----------------------------- [引入] 首先要 ... 
随机推荐
- mongodb与sql聚合对应图 M
			mongodb与sql聚合对应图 M - CSDN博客 http://blog.csdn.net/u011930016/article/details/49422425 SQL Terms, Func ... 
- dataTables-details 1.9
			本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方网站:[http://www.datatables.net/] 二:基本使用:[http://www.guoxk.com/node/jqu ... 
- POJ 1737 Connected Graph(高精度+DP递推)
			题面 \(solution:\) 首先做个推销:带负数的压位高精度(加减乘+读写) 然后:由 \(N\) 个节点组成的无向图的总数为: \(2^{N*(N-1)/2}\) (也就是说这个图总共有 \( ... 
- Safair css hack
			一下方式不会影响chrome浏览器样式 _::-webkit-full-page-media, _:future, :root .class{ /*此处放css样式*/ } 
- linux网络配置及IP绑定
			在学习时,参考了这篇文章:http://blog.csdn.net/collection4u/article/details/14127671:在这篇文章中作者讲述了VMware中虚机的三种网络模式: ... 
- 取clientdataset detal中的 更新数据, 将detal 转 数据库脚本sql
			转自永南博客,更改update 脚本只取变化字段,更改排除blob与数组字段,这两个类型会报错 function vartosql(value: Variant): wideString; var ... 
- 不用打开Eclipse就可以执行的命令
			1.android 弹出Android SDK and AVD Manager2.android list avds 列出所有创建的Android模拟器3.android list targets 列 ... 
- 51Nod 1717
			链接 分析:对于任意一个数,它的约数总是成对出现的,但是对于完全平方数,它因为有两个约数不相等,所以只会出现奇数次,所以最终的结果就是减去完全平方数 #include "iostream&q ... 
- 【SOUTH CENTRAL USA 1998】 eight
			[题目链接] 点击打开链接 [算法] 这是经典的八数码问题,据说此题不做人生不完整 这里笔者用的是双向广搜,由于细节较多,笔者花了3h才通过此题 [代码] #include <algorithm ... 
- docker容器管理基础
			1.命令: docker info #查看服务器上docker详细信息 docker search #搜索镜像 docker image pull nginx:1.14-alpine #下载一个镜像 ... 
