博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 - P2602 - 数字计数 - 数位dp
阅读量:4630 次
发布时间:2019-06-09

本文共 2713 字,大约阅读时间需要 9 分钟。

第二道数位dp,因为“数位dp都是模板题”(误),所以是从第一道的基础上面改的。

核心思想就是分类讨论,分不同情况讨论对答案的贡献。

最最重要的是,该数位取与当前位相等的时候,贡献的个数是受这个数位影响的所有数(这个写法里包括它本身),那么就用x减去与x前缀相同的“整数”再+1就可以算出来了。

 其他的数位dp……好像就不太会写了,再研究一下。

#include
using namespace std;#define ll long longll dp[14][10][10];ll pow10[14];ll sum(int i,int j1,int j2,int k){ if(j1<0) j1=0; if(j2>9) j2=9; ll res=0; for(int j=j1;j<=j2;j++){ res+=dp[i][j][k]; } return res;}void init(){ pow10[0]=1; for(int i=1;i<=13;i++){ pow10[i]=pow10[i-1]*10; } for(int j=0;j<=9;j++) dp[1][j][j]=1; for(int i=2;i<=13;i++){ for(int j=0;j<=9;j++){ for(int k=0;k<=9;k++){ dp[i][j][k]=sum(i-1,0,9,k); if(j==k){ dp[i][j][k]+=pow10[i-1]; } } } } /*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[14];int w;ll count(ll x){ //cout<<"x="<
<
=1;i--){ //printf("i=%d res=%d\n",i,res); if(i==k){ //最高位取0 for(int ii=i-1;ii>=1;ii--){ res+=sum(ii,1,9,w); //printf("you want=%d\n",res); } if(w==0) res+=1;//0 //其实不用特判啊 for(int j=1;j
=1){ if(j==w) res+=pow10[i-1]; res+=sum(i-1,0,9,w); } else{ if(j==w) res+=1; } } //最高位就取相等,问题留给下一次循环 //取相等怎么会是满的呢? if(digit[i]==w) res+=(x-x/pow10[i-1]*pow10[i-1]+1); } else{ //前面的位都相等,非最高位的情况 for(int j=0;j
=1){ if(j==w) res+=pow10[i-1]; res+=sum(i-1,0,9,w); } else{ if(j==w) res+=1; } } if(digit[i]==w) res+=(x-x/pow10[i-1]*pow10[i-1]+1); } } //一直相等的情况在上面自动处理了,不用另外处理 /*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=0;w<=9;w++) printf("%lld%c",count(B)-count(A-1)," \n"[w==9]); }}

 


后来学会了搜索写法。

 

转载于:https://www.cnblogs.com/Yinku/p/10325298.html

你可能感兴趣的文章
Python学习教程:超干货—Python3内置模块之json编解码方法小结
查看>>
谷歌浏览器的一个新特点—关于获取iframe的parent对象
查看>>
iOS开发Swift篇—(二)变量和常量
查看>>
Windows底层开发前期学习准备工作
查看>>
【C语言及程序设计】项目1-39-3:反序数
查看>>
算法——查找常用字符
查看>>
ANDORID~支持的设备
查看>>
国内外 Java Script 经典封装
查看>>
[vs2005]关于预编绎网站的问题[已预编译此应用程序的错误]
查看>>
find_in_set
查看>>
[HEOI2015]定价
查看>>
题解 洛谷P3203/BZOJ2002【[HNOI2010]弹飞绵羊】
查看>>
机器学习基石的泛化理论及VC维部分整理
查看>>
《php源码学习研究》 第一天
查看>>
C++虚函数和纯虚函数的异同
查看>>
checkbox操作
查看>>
Spring概念
查看>>
VS2017 添加引用报错问题
查看>>
LeetCode 147. Insertion Sort List
查看>>
sqlalchemy增删改查
查看>>