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

如题,这是一道数位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. python练习——小程序

    1.打印0-10(while/for) count = 0 while count < 11: print(count) count += 1 for i in range(11): print ...

  2. LayUI分页基于ASP.NET MVC

    ---恢复内容开始--- 今天写了挺久的分页,百度了很多都没有很好的.Net实例,今天我来更新一期关于layuiTable分页 首先你得理解layui的官方文档的Table分页部分,我在这里附上地址 ...

  3. HTML+CSS 制作HTML5标志图

    效果图如下:(是用代码写的,而不是图片!) 网上看到的代码. 看了下,就是CSS的transform属性的应用.加上定位等.组合在一起形成图片. 没什么难点,就是width,left等数据得根据HTM ...

  4. BZOJ4373 算术天才与等差数列 题解

    题目大意: 一个长度为n的序列,其中第i个数为a[i].修改一个点的值询问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列. 思路: 1.一段区间符合要求满足:(1)区间中的max-min ...

  5. [luoguP2577] [ZJOI2005]午餐(DP)

    传送门 显然吃饭时间越长的人排在前面越好,所以先排序. f[i][j]表示前i个人,A队的打饭时间为j的最优解,每个人只有两种选择,去A队或是去B队. #include <cstdio> ...

  6. hdu3516 Tree Construction (四边形不等式)

    题意:给定一些点(xi,yi)(xj,yj)满足:i<j,xi<xj,yi>yj.用下面的连起来,使得所有边的长度最小? 题解:直接给出吧 f[i][j]=min(f[i][k]+f ...

  7. 搭建nexus私服,无法下载相关jar包,报错Repository proxy-mode is BLOCKED_AUTO

    在搭建nexus私服的时候,之前没直接用来下载maven的相关插件jar包,一直可以使用, 结果今天要编译hadoop的时候,在linux上新用maven就报错了,无法下载maven的相关插件(如下) ...

  8. ajax请求数据之后在已经有的数据前面打对勾的方法

    今天遇到这么一个需求: 选择一部分人,在点击确定的时候添加到对应的div中,也就是添加到对应的表单下面,当再次查询的时候需要在已经选过的人的复选框前面打伤对勾.

  9. python学习之-- subprocess模块

    subprocess 模块 功能:用来生成子进程,并可以通过管道连接它们的输入/输出/错误,以及获得它们的返回值.它用来代替多个旧模块和函数: os.system os.spawn* os.popen ...

  10. Topcoder 2015_1C

    A:大水题; B:求一颗树中,有多少条路径 不存在路径中一点是另外一点的祖先,(后面废话说了很多) 其实一个点 可以到它本身也可以是一条路径结论是:统计叶子的节点.(真简单粗暴 C:题目不说,说也说不 ...