作为博客园的第一篇...我都不知道要写什么了 ... 其实今天很没状态,就当吐槽吧... 嗯,被黄神带去写treap+可持久化线段树,然后在可持久化的删除上面跪了两天,真的是一跪不起.我已经连续多久没有AC一道题了?有时候真心会觉得,学一些东西,到达差不多就应该先放手,一次性钻太深对自己没好处.其实之前到可持久化结束就可以结束了,还顺手搞掉配对堆和替罪羊,已经很不错了.这时候再来搞什么可持久化的加深...额有点感觉无效率.加上自己这两天社团有事,状态直接变成渣了...自己的错,都是蒟蒻的借口罢了…
前言 数位DP是什么?以前总觉得这个概念很高大上,最近闲的没事,学了一下发现确实挺神奇的. 从一道简单题说起 hdu 2089 "不要62" 一个数字,如果包含'4'或者'62',它是不吉利的.给定m,n,0<m≤n<10^6,统计[m,n]范围内吉利数的个数. 这题的数据范围比较小,只有1e6,理论上暴力也是可以解的.但数位dp的题目数据范围通常很大,往往达到1e18甚至更大,暴力法O(n)显然会TLE.这个时候需要一种时间复杂度近似O(logn)的算法.仔细思考一下,其…
Hdu 2089 不要62 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; inline int read() { ; for(;!isdigit(c);c=getchar()); for(;isdigit(c);c=getchar…
推荐以下一篇博客:https://blog.csdn.net/wust_zzwh/article/details/52100392 1.(HDOJ2089)http://acm.hdu.edu.cn/showproblem.php?pid=2089 分析:裸模板题 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ]; ][]…
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字,数组会开不起,该怎么办呢?要用到数位dp. 数位dp一般应用于: 求出在给定区间[A,B]内,符合条件P(i)的数i的个数. 条件P(i)一般与数的大小无关,而与 数的组成 有关. 这样,我们就要考虑一些特殊的记录方法来做这道题.一般来说,要保存给定数的每个位置的数.然后要记录的状态为当前操作数的位数,剩下的…
题目描述: 定义数的消除操作为选定[L,R,x],如果数的第L到第R位上的数字都大于等于x,并且这些数都相等,那么该操作是合法的(从低位到高位编号,个位是第一位,百位是第二位……),然后将这些位数上的数减x:否则就是不合法的,不能进行操作.对一个数操作最少的次数使得这个数变成0,这个操作次数称为该数的最小操作数.如:1232的最小操作数为3,一个合法解是[2,2,1],[1,3,2],[4,4,1]. 求L~R中最小操作数为k的数的个数. 例如:132,需要操作3次才能变为0.而131131 =…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题意:求区间[L,R]内每一个数中是否存在一位,使得左边的各位数*距离=右边的各位数*距离(自己和自己的距离算0). 先枚举pivot的位置,然后做数位dp,记录当前数位.pv的位置和当前和.由于前导零的存在,最后结果要减掉诸如00,000,000...0这样的情况(个数和数位长度相同,当然单独一个0是合法的). 最终结果ret-pos+1 #include <bits/stdc++.h>…
 数位DP总结 By Wine93 2013.7 1.学习链接 [数位DP] Step by Step   http://blog.csdn.net/dslovemz/article/details/8540340 [总结] 数位统计模板 http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html 2.各人总结领悟 数位DP关键在于状态的设计,设计状态时要考虑当前状态(如dp[pos][s1][s2]),一旦当前状态确定后,pos后…
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000). 输…
求区间[l,r]内有多少个数的满足:   选一个位为中点,是的左边的数到该位的距离等于右边的位到该位的距离. 比如4139  选择3位中点, 那么左边的距离是 4 * 2 + 1 * 1 , 右边的距离是9 * 1 想了半天,想到了枚举哪一位作为中点, 然后进行数位dp, 但是样例错了, 忽然想到会重复啊,就百度了一下 原来只有0在枚举中点时会重复,其他的数有且只有一个中点是的左边的距离等于右边的距离 所以只要最后ans-len+1即可 #include <functional> #inclu…