难受啊,怎么又遇到我不会的题了(捂脸)

如题,这是一道数位DP,随便找了个博客居然就是我们大YZ的……果然nb,然后就是改改模版++注释就好的了,直接看注释吧,就是用1~B - 1~A-1而已,枚举全部位然后判一下是不是上限边缘和前导零就OK

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
LL bit[]; int len,a[];
LL as[],ret[];//ret表示假如是上限边缘,后面有多少种填的方式
LL f[][][];
//f[k][fg][z]表示当前这个数x,搞到第k位的时候的数目
//fg表示该位是不是在上限边缘 z表示目前是否还是前导零
LL dfs(int x,int k,int fg,int z)
{
if(k==len+)return ;
if(f[k][fg][z]!=-)return f[k][fg][z]; LL ans=;
if(fg==)//如果前面的部分处于上限边缘
{
for(int i=;i<a[k];i++)//不填上限边缘,枚举填什么
{
if(z==&&i==)ans+=dfs(x,k+,,);
else
{
ans+=dfs(x,k+,,);
if(i==x)ans+=bit[len-k];
}
//如果i是要统计次数的那个数字,而且不是在前导零的时候,而且还不是在上限的边缘
//那么后面几位的数字有多少种填法x就出现了几次
}
//该位填上限边缘
if(z==&&a[k]==)ans+=dfs(x,k+,,);
else
{
ans+=dfs(x,k+,,);
if(a[k]==x)ans+=ret[k];
}
//如果填的是要统计次数的那个数字 而且不是在前导零的时候
//那么后面的数字最多有多少种填法x就出现了几次
}
else//没有限制
{
for(int i=;i<=;i++)//同上
{
if(z==&&i==)ans+=dfs(x,k+,,);
else
{
ans+=dfs(x,k+,,);
if(i==x)ans+=bit[len-k];
}
}
}
f[k][fg][z]=ans;
return ans;
}
char s[];
void cl()//把A减1
{
int t=len;
while(t>&&s[t]==''){s[t]='';t--;}
s[t]--;
if(s[t]==)
{
len--;
for(int i=;i<=len;i++)s[i]=s[i+]-'';
}
}
int main()
{
freopen("dream.in","r",stdin);
freopen("dream.out","w",stdout);
bit[]=;for(int i=;i<=;i++)bit[i]=bit[i-]*;
memset(as,,sizeof(as)); scanf("%s",s+);len=strlen(s+);cl();
for(int i=;i<=len;i++)a[i]=s[i]-'';
//0的情况,所以填的方案都要+1
ret[len]=;for(int i=len-;i>=;i--)ret[i]=a[i+]*bit[len-i-]+ret[i+];
for(int i=;i<=;i++)
{
memset(f,-,sizeof(f));
as[i]-=dfs(i,,,);
} scanf("%s",s+);len=strlen(s+);
for(int i=;i<=len;i++)a[i]=s[i]-''; ret[len]=;for(int i=len-;i>=;i--)ret[i]=a[i+]*bit[len-i-]+ret[i+];
for(int i=;i<=;i++)
{
memset(f,-,sizeof(f));
as[i]+=dfs(i,,,);
} for(int i=;i<;i++)printf("%d ",as[i]);
printf("%d\n",as[]);
return ;
}

bzoj1833: [ZJOI2010]count 数字计数&&USACO37 Cow Queueing 数数的梦(数位DP)的更多相关文章

  1. [BZOJ1833][ZJOI2010]count 数字计数

    [BZOJ1833][ZJOI2010]count 数字计数 试题描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入 输入文件中仅包含一行两个整数a ...

  2. BZOJ1833 ZJOI2010 count 数字计数 【数位DP】

    BZOJ1833 ZJOI2010 count 数字计数 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包 ...

  3. bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)

    1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...

  4. [BZOJ1833][ZJOI2010]Count数字计数(DP)

    数位DP学傻了,怎么写最后都写不下去了. 这题严格上来说应该不属于数位DP?只是普通DP加上一些统计上的判断吧. 首先复杂度只与数的位数$\omega$有关,所以怎么挥霍都不会超. f[i][j][k ...

  5. bzoj1833: [ZJOI2010]count 数字计数 数位dp

    bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...

  6. bzoj1833: [ZJOI2010]count 数字计数 && codevs1359 数字计数

    bzoj1833 codevs1359 这道题也是道数位dp 因为0有前导0这一说卡了很久 最后发现用所有位数减1~9的位数就okay.....orzczl大爷 其他就跟51nod那道统计1出现次数一 ...

  7. [bzoj1833][ZJOI2010]count 数字计数——数位dp

    题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...

  8. BZOJ1833 [ZJOI2010]count 数字计数 【数学 Or 数位dp】

    题目 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中仅包含一行两个整数a.b,含义如上所述. 输出格式 输出文件中包含一行10个整数, ...

  9. 【数位dp】bzoj1833: [ZJOI2010]count 数字计数

    数位dp姿势一直很差啊:顺便庆祝一下1A Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a ...

随机推荐

  1. [MVC]Ajax辅助方法

    在开始使用Ajax辅助方法前,必须在页面中载入jQuery以及jquery.unobtrusive-ajax.js文件才能正常执行. 为了让网站载入适当的JS函数库,必须先让Layout页面载入适当的 ...

  2. robotframework使用requestsLibrary进行接口测试

    一.定义 接口测试:接口测试通常是系统之间交互的接口,或者某个系统对外提供的一些接口服务 分类:RESTful.webservice接口 二.安装 进入C:\Pyhon27\scripts 先要安装r ...

  3. C# CreateDataTable

    public DataTable CreateDataTable()         {             DataTable dataTable = new DataTable();      ...

  4. [luoguP1773] 符文之语_NOI导刊2010提高(02)(DP)

    传送门 f[i][j]表示前i个数余数为j的最优解 sum[i][j]表示字符串i~j所构成的数 #include <cstdio> #include <cstring> #d ...

  5. POJ 2112: Optimal Milking【二分,网络流】

    题目大意:K台挤奶机,C个奶牛,每台挤奶器可以供M头牛使用,给出奶牛和和机器间的距离矩阵,求所有奶牛走最大距离的最小值 思路:最大距离的最小值,明显提示二分,将最小距离二分之后问题转化成为:K台挤奶机 ...

  6. CodeForces - 462B Appleman and Card Game

    是一道简单题 将字母从个数多到小排序 然后 再按题目算法得到最多 但是注意 数据类型声明 money要为long long #include <iostream> #include < ...

  7. linux awk常用命令【转载】

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  8. SQL SERVER 2012 第四章 连接 JOIN の OUTER JOIN,完全连接FULL JOIN,交叉连接CROSS JOIN

    SELECT <SELECT LIST> FROM <the table you want to be the "LEFT" table> <LEFT ...

  9. Codeforces 658D Bear and Polynomials【数学】

    题目链接: http://codeforces.com/contest/658/problem/D 题意: 给定合法多项式,改变一项的系数,使得P(2)=0,问有多少种方法? 分析: 暴力求和然后依次 ...

  10. BCD工具类(8421)

    目录 1.BCD介绍 (1)BCD码(Binary-Coded Decimal)亦称二进码十进数.用4位二进制数来表示1位十进制数中的0~9这10个数码.用二进制编码的十进制代码. (2)BCD码可分 ...