洛谷 - P2602 - 数字计数 - 数位dp
https://www.luogu.org/problemnew/show/P2602
第二道数位dp,因为“数位dp都是模板题”(误),所以是从第一道的基础上面改的。
核心思想就是分类讨论,分不同情况讨论对答案的贡献。
最最重要的是,该数位取与当前位相等的时候,贡献的个数是受这个数位影响的所有数(这个写法里包括它本身),那么就用x减去与x前缀相同的“整数”再+1就可以算出来了。
其他的数位dp……好像就不太会写了,再研究一下。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll dp[][][];
ll pow10[]; ll sum(int i,int j1,int j2,int k){
if(j1<)
j1=;
if(j2>)
j2=;
ll res=;
for(int j=j1;j<=j2;j++){
res+=dp[i][j][k];
}
return res;
} void init(){
pow10[]=;
for(int i=;i<=;i++){
pow10[i]=pow10[i-]*;
} for(int j=;j<=;j++)
dp[][j][j]=;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
dp[i][j][k]=sum(i-,,,k);
if(j==k){
dp[i][j][k]+=pow10[i-];
}
}
}
} /*for(int j=1;j<=2;j++){
dp[9][j]=sum(8,0,j-2)+sum(8,j+2,9);
}*/ /*for(int i=1;i<=13;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++)
printf("dp[%d][%d][%d]=%d\n",i,j,k,dp[i][j][k]);
}
printf("\n");
}*/
} ll A,B;
int digit[]; int w; ll count(ll x){
//cout<<"x="<<x<<endl;
if(x<)
return ;
if(x==){
if(w==)
return ;
else
return ;
}
//否则岂不是0位数?
ll k=,cx=x;
digit[k++]=;
//占位用的
while(cx){
digit[k++]=cx%;
cx/=;
}
k--;
digit[k+]=;
//也是占位 ll res=;
for(int i=k;i>=;i--){
//printf("i=%d res=%d\n",i,res);
if(i==k){
//最高位取0
for(int ii=i-;ii>=;ii--){
res+=sum(ii,,,w);
//printf("you want=%d\n",res);
}
if(w==)
res+=;//0
//其实不用特判啊
for(int j=;j<digit[i];j++){
//最高位比digit小且不为0 if(i->=){
if(j==w)
res+=pow10[i-];
res+=sum(i-,,,w);
}
else{
if(j==w)
res+=;
}
}
//最高位就取相等,问题留给下一次循环
//取相等怎么会是满的呢?
if(digit[i]==w)
res+=(x-x/pow10[i-]*pow10[i-]+);
}
else{
//前面的位都相等,非最高位的情况
for(int j=;j<digit[i];j++){
if(i->=){
if(j==w)
res+=pow10[i-];
res+=sum(i-,,,w);
}
else{
if(j==w)
res+=;
}
}
if(digit[i]==w)
res+=(x-x/pow10[i-]*pow10[i-]+);
}
} //一直相等的情况在上面自动处理了,不用另外处理
/*for(int i=1;i<=k;i++){
if(digit[i]==w){
res++;
}
}*/
//printf("res=%d\n",res);
return res;
} int main(){
init();
while(~scanf("%lld%lld",&A,&B)){
for(w=;w<=;w++)
printf("%lld%c",count(B)-count(A-)," \n"[w==]);
}
}
后来学会了搜索写法。
洛谷 - P2602 - 数字计数 - 数位dp的更多相关文章
- 洛谷P2602 数字计数 [ZJOI2010] 数位dp
正解:数位dp 解题报告: 传送门! 打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪 ...
- 【题解】P2602 数字计数 - 数位dp
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...
- 洛谷P2602 [ZJOI2010]数字计数(数位dp)
数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ...
- Luogu P2602 [ZJOI2010]数字计数 数位DP
很久以前就...但是一直咕咕咕 思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio> #include<iostream> #include<c ...
- 【BZOJ-1833】count数字计数 数位DP
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2494 Solved: 1101[Submit][ ...
- 洛谷 - P2657 - windy数 - 数位dp
https://www.luogu.org/problemnew/show/P2657 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. 这道题是个显然到不能再显然的数位dp了. 来个 ...
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...
- BZOJ 1833 数字计数 数位DP
题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有 ...
- UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...
随机推荐
- firebug console说明
控制台(Console)是Firebug的第一个面板,也是最重要的面板,主要作用是显示网页加载过程中产生各类信息. 一.显示信息的命令 Firebug内置一个console对象,提供5种方法,用来显示 ...
- LeetCode——Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you ...
- 关于数组类型的json解析方法
遇到了非常奇葩的数组类型的json,一时解析不出来,用jsonObject会直接报错. Json数据如: [{"id":"1000142","name ...
- Dell服务器相关操作
1. Raid相关: # 删除已有的Raid配置 MegaCli64 -CfgLdDel -LALL -aALL # 获取设备ID和槽号 MegaCli64 -PDList -aALL|egrep ' ...
- iOS之UI--涂鸦画板实例
iOS之UI--涂鸦画板实例 首先是搭建框架 其他的略过,直接展示效果: 然后接下来上传搭建好两个控制器框架的源码百度云下载链接: http://pan.baidu.com/s/1skjpDox ...
- 移动Web开发实践
移动设备的高速发展给用户带来了非常大的便利.用户使用Android.iPhone和其他移动设备非常easy接入互联网. 移动设备对网页的性能要求比較高.以下就说说Mobile Web开发的一些心得. ...
- Arcgis Engine(ae)接口详解(4):featureClass的feature插入
//由于测试数据不完善,featureClass在此要只设null值,真实功能要设实际的值 IFeatureClass featureClass = null; //获取某个字段的索引,后面取字段值用 ...
- Tomcat配置,Myeclipse破解和各种设置
转自:http://www.cnblogs.com/tyjsjl/archive/2006/11/14/2156111.html 根据tomcat来配置eclipse和MyEclipse结合使用起来, ...
- c++vector简单实现
const int DEFAULT_CAP = 3; template <typename T> class vector { // int capacity; T* _data; int ...
- 2016/07/05 zend optimizer
Zend Optimizer是由PHP核心引擎“Zend” http://www.zend.com 创建者Zend技术公司所开的免费PHP优化软件.据Zend公司透露使用这个软件某些情况下至少可以提高 ...