bzoj1833: [ZJOI2010]count 数字计数&&USACO37 Cow Queueing 数数的梦(数位DP)
难受啊,怎么又遇到我不会的题了(捂脸)
如题,这是一道数位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)的更多相关文章
- [BZOJ1833][ZJOI2010]count 数字计数
[BZOJ1833][ZJOI2010]count 数字计数 试题描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入 输入文件中仅包含一行两个整数a ...
- BZOJ1833 ZJOI2010 count 数字计数 【数位DP】
BZOJ1833 ZJOI2010 count 数字计数 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包 ...
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...
- [BZOJ1833][ZJOI2010]Count数字计数(DP)
数位DP学傻了,怎么写最后都写不下去了. 这题严格上来说应该不属于数位DP?只是普通DP加上一些统计上的判断吧. 首先复杂度只与数的位数$\omega$有关,所以怎么挥霍都不会超. f[i][j][k ...
- bzoj1833: [ZJOI2010]count 数字计数 数位dp
bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...
- bzoj1833: [ZJOI2010]count 数字计数 && codevs1359 数字计数
bzoj1833 codevs1359 这道题也是道数位dp 因为0有前导0这一说卡了很久 最后发现用所有位数减1~9的位数就okay.....orzczl大爷 其他就跟51nod那道统计1出现次数一 ...
- [bzoj1833][ZJOI2010]count 数字计数——数位dp
题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...
- BZOJ1833 [ZJOI2010]count 数字计数 【数学 Or 数位dp】
题目 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中仅包含一行两个整数a.b,含义如上所述. 输出格式 输出文件中包含一行10个整数, ...
- 【数位dp】bzoj1833: [ZJOI2010]count 数字计数
数位dp姿势一直很差啊:顺便庆祝一下1A Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a ...
随机推荐
- Linux C 动态内存分配--malloc,new,free及相关内容
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- 完善的IaaS云服务的个人理解
此文已由作者王盼授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前情提要 本文仅讨论云主机(虚拟机).云硬盘(块存储).云网络(普通虚拟网络或SDN)相关的IaaS服务,相关 ...
- Leetcode 222.完全二叉树的节点个数
完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最 ...
- PTA 02-线性结构3 Reversing Linked List (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/664 5-2 Reversing Linked List (25分) Given a ...
- POJ 2352 star level
题目链接: http://poj.org/problem?id=2352 题目大意:对于每一颗星星来说,都有一个属于自己的level,这个值为其他星星x,y坐标均不大于本星星的个数.输入时按先y由小到 ...
- IPython的常见用法
IPython :交互式的Python命令行 安装: pip install ipython 使用(命令行中启动): ipython # 与Python解释器的使用方法一致 IPython高级功能: ...
- ubuntu 配置 samba, win7 map network device from linux
一. samba的安装: # sudo apt-get insall samba # sudo apt-get install smbfs 二. 创建共享目录,或是找已经存在的文件夹,只要权限放开就行 ...
- hybird app 用 xcode ios打包 ipa 测试包并且安装真机测试
1.创建 ios 项目 1.用 cordova 创建一个 ios 项目 npm install -g cordova cordova create hello com.mydomain.hello H ...
- eclipse中安装maven插件
原文:http://blog.csdn.net/wode_dream/article/details/38052639 当自己越来越多的接触到开源项目时,发现大多数的开源项目都是用maven来够建的. ...
- 使用Python将数据插入数据库(一)
假如我现在有一个Excel数据表格,需要将其数据插入MySQL数据库中.数据如下: 对应的Python实现代码如下: #导入需要使用到的数据模块 import pandas as pd import ...