hdu3709 Balanced Number(数位dp)
来源:互联网 发布:mac 版cad导入字体库 编辑:程序博客网 时间:2024/05/23 14:34
hdu3709
题目
有一种数字,以某一位为支点,把它看成杠杠,如果平衡的话就是平衡数,如4139,以3为支点4*2+1=9,现给定区间求平衡数的个数。
思路
记录支点pov以及当前力矩l,调用函数时枚举pov,算l时用(len-pov)*i,这样当l<0时就没必要算下去了,算是个剪枝,其他就是数位dp了。
代码
#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<algorithm>#include<stack>using namespace std;typedef long long ll;ll dp[20][20][3000];int dis[20];ll dfs(int len,int pov,int l,int lim){ if(l<0) return 0; if(len<0) return l==0?1:0; if(!lim&&dp[len][pov][l]!=-1) return dp[len][pov][l]; ll res=0; int u=lim?dis[len]:9; for(int i=0;i<=u;i++) { res+=dfs(len-1,pov,l+(len-pov)*i,lim&&i==u); } if(lim) return res; else return dp[len][pov][l]=res;}ll solve(ll x){ int len=0; while(x) { dis[len++]=x%10; x/=10; } ll ans=0; for(int i=0;i<len;i++) ans+=dfs(len-1,i,0,1); return ans-(len);}ll a,b;int main(){ int T; scanf("%d",&T); while(T--) { scanf("%I64d %I64d",&a,&b); memset(dp,-1,sizeof(dp)); printf("%I64d\n",solve(b)-solve(a-1)); }}
0 0
- hdu3709 Balanced Number(数位dp)
- hdu3709 Balanced Number(数位dp)
- hdu3709 Balanced Number(数位dp)
- HDU3709:Balanced Number(数位dp)
- hdu3709 Balanced Number(数位DP)
- HDU3709 Balanced Number 数位DP
- [HDU3709]Balanced Number && 数位DP
- hdu3709 Balanced Number 数位dp
- hdu3709---Balanced Number(数位dp)
- hdu3709 Balanced Number 数位dp
- 数位dp hdu3709 Balanced Number
- HDU3709 Balanced Number 数位DP
- hdu3709 Balanced Number 数位dp
- HDU3709 Balanced Number[数位DP]
- hdu3709——Balanced Number(数位dp)
- 【1】【数位DP】HDU3709 Balanced Number
- HDU3709:Balanced Number(数位DP+记忆化DFS)
- hdu3709 - Balanced Number(2010 Asia Chengdu Regional Contest)数位dp
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- POJ - 3735 Training little cats(矩阵快速幂)
- Hive 分区,静态分区,动态分区
- hdu---5234
- 关于Spring定时任务(定时器)用法
- hdu3709 Balanced Number(数位dp)
- equals方法的重写
- 大数系列——大数除法以及求模
- POJ 3261 Milk Patterns , Hash
- 软件工程——需求分析
- ScrollingImageView 横向滚动的image view
- Linux-CentOS XAMPP Apache 启用GZIP压缩功能 mod_deflate的安装配置
- CSU-1111 三家人
- createEvent模拟mouseMove方法