Hdu 2089 不要62

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std; typedef long long LL; inline int read()
{
char c=getchar();int num=;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
num=num*+c-'';
return num;
} const int N=1e6+; int n,m;
int a[],dgt;
int f[][; int dfs(int dep,int pre,int sta,bool lim)
{
if(!dep)
return ;
if(!lim&&f[dep][sta!=-)
return f[dep][sta];
int up=lim?a[dep]:;
int ans=;
for(int i=;i<=up;++i)
{
if(i==) continue;
if(pre==&&i==) continue;
ans+=dfs(dep-,i,i==,lim&&i==a[dep]);
}
if(!lim)
f[dep][sta]=ans;
return ans;
} int solve(int x)
{
for(dgt=;x;a[++dgt]=x%,x/=);
return dfs(dgt,,,);
} int main()
{
while()
{
memset(f,-,sizeof(f));
n=read(),m=read();
if(!n&&!m)
break;
cout<<solve(m)-solve(n-)<<'\n';
}
return ;
}

Hdu 6148 Valley Numer

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std; typedef long long LL; inline int read()
{
char c=getchar();int num=;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
num=num*+c-'';
return num;
} const int N=;
const int mod=1e9+; int T,n;
char a[N];
int f[N][][]; int dfs(int dep,int pre,int turn,bool lim,bool invalid)
{
if(dep==n+)
return invalid?:;
if(!lim&&f[dep][pre][turn]!=-)
return f[dep][pre][turn];
int up=lim?a[dep]-='':;
int ans=;
for(int i=;i<=up;++i)
{
if(turn==&&i<pre)
continue;
int p=;
if(invalid) p=;
else if(i>pre) p=;
else if(i<pre) p=;
else p=turn;
ans+=dfs(dep+,i,p,lim&&i==a[dep],invalid&&i==);
ans%=mod;
}
if(!lim)
f[dep][pre][turn]=ans;
return ans;
} int main()
{
T=read();
while(T--)
{
memset(f,-,sizeof(f));
scanf("%s",a+);
n=strlen(a+);
cout<<dfs(,,,,)<<'\n';
}
return ;
}

Bzoj 1026: [SCOI2009]windy数

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; typedef long long LL; inline LL read()
{
char c=getchar();LL num=;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
num=num*+c-'';
return num;
} LL A,B;
LL a[],dgt;
LL f[][]; LL dfs(int dep,int pre,bool lim,bool invalid)
{
if(!dep)
return invalid?:;
if(!lim&&!invalid&&f[dep][pre]!=-)
return f[dep][pre];
int up=lim?a[dep]:;
LL ans=;
for(int i=;i<=up;++i)
{
if(!invalid&&abs(i-pre)<) continue;
ans+=dfs(dep-,i,lim&&i==a[dep],invalid&&i==);
}
if(!lim&&!invalid)
f[dep][pre]=ans;
return ans;
} LL solve(LL x)
{
for(dgt=;x;a[++dgt]=x%,x/=);
return dfs(dgt,,,);
} int main()
{
A=read(),B=read();
memset(f,-,sizeof(f));
cout<<solve(B)-solve(A-);
return ;
}

Poj 3252  Round Numbers

题意:问[l,r]中二进制位1比0少的数有多少个。

Sol: 记录当前层0,1个数。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; typedef long long LL; inline int read()
{
char c=getchar();int num=;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
num=num*+c-'';
return num;
} int l,r;
int a[],bit;
int f[][][]; int dfs(int dep,int c0,int c1,bool lim,bool invalid)
{
if(!dep)
return (!invalid&&c0>=c1)?:;
if(!lim&&f[dep][c0][c1]!=-)
return f[dep][c0][c1];
int up=lim?a[dep]:;
int ans=;
for(int i=;i<=up;++i)
ans+=dfs(dep-,c0+(i==&&!invalid),c1+(i==),lim&&i==up,invalid&&i==);
if(!lim)
f[dep][c0][c1]=ans;
return ans;
} int solve(int x)
{
for(bit=;x;a[++bit]=x&,x>>=);
return dfs(bit,,,,);
} int main()
{
memset(f,-,sizeof(f));
l=read(),r=read();
cout<<solve(r)-solve(l-);
return ;
}

P2518 [HAOI2010]计数

一个比较假的数位DP?但也是按照数位来做的。

Sol:无。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; typedef long long LL; inline int read()
{
char c=getchar();int num=;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
num=num*+c-'';
return num;
} char num[];
LL ans;int n,m;
int a[],cnt[]; LL c[][];
void init()
{
c[][]=;
for(int i=;i<=;++i)
{
c[i][]=;
for(int j=;j<=i;++j)
c[i][j]=c[i-][j-]+c[i-][j];
}
} LL C(int n)
{
LL res=;
for(int i=;i<;++i)
if(cnt[i])
res*=c[n][cnt[i]],n-=cnt[i];
return res;
} int main()
{
init();
scanf("%s",num+);
for(n=;num[n];++n)
a[n]=num[n]-'',++cnt[num[n]-''];
m=--n;
for(int i=;i<=n;++i)
{
--m;
for(int j=;j<a[i];++j)
if(cnt[j])
--cnt[j],ans+=C(m),++cnt[j];
--cnt[a[i]];
}
cout<<ans;
return ;
}

# 数位DP入坑的更多相关文章

  1. 【距离GDOI:141天】 滚入数位DP的坑

    作为博客园的第一篇...我都不知道要写什么了 ... 其实今天很没状态,就当吐槽吧... 嗯,被黄神带去写treap+可持久化线段树,然后在可持久化的删除上面跪了两天,真的是一跪不起.我已经连续多久没 ...

  2. 数位dp踩坑

    前言 数位DP是什么?以前总觉得这个概念很高大上,最近闲的没事,学了一下发现确实挺神奇的. 从一道简单题说起 hdu 2089 "不要62" 一个数字,如果包含'4'或者'62', ...

  3. 开坑数位dp

    [背景] 在10月3日的dp专练中,压轴的第6题是一道数位dp,于是各种懵逼. 为了填上这个留存已久的坑,蒟蒻chty只能开坑数位dp了. [例题一][HDU2089]不要62 题目大意:给你一个区间 ...

  4. 浅谈数位DP

    在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...

  5. 51NOD 1623 完美消除 数位DP

    题目描述: 定义数的消除操作为选定[L,R,x],如果数的第L到第R位上的数字都大于等于x,并且这些数都相等,那么该操作是合法的(从低位到高位编号,个位是第一位,百位是第二位……),然后将这些位数上的 ...

  6. 数位dp——统计'1'的个数

    今天去牛客网看了看 包含一 这道题,一开始没看清,以为它要统计 1~n 所有数中数字 '1' 出现的总次数,也就是说,若 n == 11,则 ans = 4:而按照题目的原意 ans 应该为 3.看错 ...

  7. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  8. 数位DP专题

    这周开始刷数位DP,在网上找到一份神级数位DP模板,做起题目来爽歪歪. http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html in ...

  9. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 682  Solved: 364 Description 我们称一 ...

随机推荐

  1. 【前端知识体系-CSS相关】CSS布局知识强化

    1.实现两栏/三栏布局的方法? 表格布局 float + margin布局 inline-block布局 flexbox布局(兼容性的问题) 1.1 基础布局 <style> * { ma ...

  2. lock、tryLock和lockInterruptibly的差別

    lock():若lock被thread A取得,thread B会进入block状态,直到取得lock:tryLock():若当下不能取得lock,thread就会放弃,可以设置一个超时时间参数,等待 ...

  3. [转帖]ZEROCONF是什么

    ZEROCONF是什么 xjsunjie关注0人评论9867人阅读2014-05-13 16:12:18 https://blog.51cto.com/xjsunjie/1410592 奇怪 两个文档 ...

  4. 五、Hexo静态博客背景及界面显示优化配置

    示例预览:我的主页 背景图片添加 自动切换背景 静态本地背景 首先将已选定的背景图片放到博客根目录下的\source\images下 ​ 示例:D:\Blog\source\images\backgr ...

  5. Java学习:IO流

    IO流 1.IO流 用于处理设备上的数据. 设备:硬盘,内存,键盘录入. 2. IO有具体的分类: 根据处理的数据类型不同:字节流和字符流. 根据流向不同:输入流和输出流. 字符流的由来: 因为文件编 ...

  6. 2019-11-29-WPF-高速书写-StylusPlugIn-原理

    原文:2019-11-29-WPF-高速书写-StylusPlugIn-原理 title author date CreateTime categories WPF 高速书写 StylusPlugIn ...

  7. Oracle数据库触发器

    第一次写触发器,浪费了一个小时,少了一个;编译不通过 当A表有更新或插入数据时,则触发器执行向B表插入对应条件的数据1 CREATE OR REPLACE TRIGGER Test -- 触发器名称 ...

  8. 微服务架构 ------ 插曲 linux LVM磁盘扩容

    1.LVM的基本概念 物理卷(PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件,物理卷包括一个特殊的header,其余部分被切割成一块块物理区域. 卷组(VG):将一组物 ...

  9. Flask路由系统

    Flask路由系统 我们之前了解了路由系统是由带参数的装饰器完成的. 路由本质:装饰器和闭包实现的. 设置路由的两种方式 第一种: @app.route('/index') def index(): ...

  10. PAT 1024 科学记数法

    PAT 1024 科学记数法 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部 ...