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. PHP操作 二维数组模拟mysql函数

    PHP操作 二维数组模拟mysql函数<pre>public function monimysqltest(){ $testarray=array( array('ss'=>'1', ...

  2. Axios构造函数学习笔记

    Axios 构造函数 lib/core/axios.js ... var intercaptorManager = require(./IntercaptorManger); var dispatch ...

  3. XMLHttpRequest原生方法

    时间久了,在工作中会有很多方法和见解. 随着时间的推移,慢慢的写的代码越来越多,封装分方法也越来越多,为的是方便后续工作,加快开发效率! 与此同时,我们会相应的去找一些插件,来代替我们在开发过程中执行 ...

  4. Java学习清单

    转自: csdn/zuochao_2013/article/details/76795164   ·   Java基础部分 *Java基础才是重中之重,只有基础打牢了,学习各种框架才能游刃有余. 1, ...

  5. Prometheus 安装Alertmanager集成

    Prometheus 安装Alertmanager集成 # 下载地址 地址1:https://prometheus.io/download/ 地址2:https://github.com/promet ...

  6. 干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)

    双十一剁手节过去了,大家应该在很多网页中看到了数字翻牌的效果吧,比如倒计时. 数字增长等.相信很多人都已经自己独立实现过了,我也在网上看了一些demo,发现HTML结构大多比较复杂,用了4个并列的标签 ...

  7. python爬取豆瓣电影首页超链接

    什么是爬虫?  我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链 ...

  8. Layui 时间转换时间戳

    我比较喜欢用Layui,当然也遇到一些坑!例如:绑定时间的时候是那种 是这种13位数据的日期,如果不经过转换是不能正常显示的,当然这是我遇到的问题不知道你们有没有遇到,后来我也是经过了解才知道怎么回事 ...

  9. 用友 U9 常用的东西

    系统资源 数据字典 UI组件 UI参照组件 BE组件 BP组件 SV组件

  10. ListView 根据 文件路径 或 扩展名 显示系统文件图标

    private void 获取文件button1_Click(object sender, EventArgs e)         {            folderBrowserDialog1 ...