hdu 4734数位dp(记忆化搜索)
来源:互联网 发布:苹果笔记本装mac 编辑:程序博客网 时间:2024/05/16 09:17
本题意思非常明确,就是一道数位dp,纯模板题:没什么好说的,直接上代码:
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1<<9;long long A,B;int lvalue;int cnt,limit[10];int binary_index[10];int dp[10][10*maxn];void index_init()///把所有2^n的值保存下来{ binary_index[0]=1; for(int i=1;i<10;i++) { binary_index[i]=2*binary_index[i-1]; } memset(dp,-1,sizeof(dp));///也作为一种标记}void init(){ cnt=0; while(B) { limit[cnt++]=B%10; B/=10; } int cnta=0; lvalue=0; while(A) { lvalue+=(A%10)*binary_index[cnta++]; A/=10; }}int dfs(int bit,int value,bool flag){ int ans=0; if(value<0) return 0; if(bit<0) { if(value>=0) return 1; } if(!flag && dp[bit][value]!=-1)///只有当这位没有范围限制的时候才能够用dp[bit][value] { return dp[bit][value]; } int num = (flag ? limit[bit]:9); for(int i=0;i<=num;i++) { ans+=dfs(bit-1,value-i*binary_index[bit],flag && (i==limit[bit]));///为什么不用dp[bit][value]递推的原因就是有范围限制,如果这次更新了,那么下次还是不能直接用 } if(!flag)///关键的地方,如果没有这一步的话,那么每一个都没有记录,时间复杂度一样 dp[bit][value]=ans; return ans;}int main(){ int nCase; scanf("%d",&nCase); index_init(); for(int t=1;t<=nCase;t++) { scanf("%I64d%I64d",&A,&B); init(); printf("Case #%d: %d\n",t,dfs(cnt-1,lvalue,1)); } return 0;}
0 0
- hdu 4734数位dp(记忆化搜索)
- hdu 5179 数位dp+记忆化搜索
- hdu 5898 数位dp,记忆化搜索
- hdu 3709(数位dp 记忆化搜索)
- hdu 2089 记忆化搜索写法(数位dp)
- HDU 3652 B-number(数位DP+记忆化搜索)
- hdu-3943[数位dp(记忆化搜索)+二分]
- HDU-5576-数位DP(记忆化搜索)
- [HDU 2089] 不要62 数位DP(记忆化搜索)
- hdu3555(数位dp记忆化搜索)
- codeforces (数位dp 记忆化搜索)
- NUBT1475 数位dp(记忆化搜索)
- hdu3555Bomb(数位dp&&记忆化搜索)
- hdu 3652(数位dp 记忆化搜索方法)
- hdu 3555 数位dp水题 记忆化搜索做法
- HDU 2089 不要62(数位DP·记忆化搜索)
- HDU 2089 不要62(数位dp&记忆化搜索)
- HDU 3555 Bomb(数位dp&记忆化搜索)
- 精选:局部变量、全局变量、堆、堆栈、静态和全局
- 内存管理
- Unity笔记
- sgu112
- Android学习系列(1)--为App签名(为apk签名)
- hdu 4734数位dp(记忆化搜索)
- spring mvc配置
- 蓝牙设置应用源码分析
- 第13周上机实践项目5——字符串操作(1)
- [开篇]C#静态变量调用及初始化
- Unity study 141125-1
- [java 基础]Eclipse下发布的应用在Tomcat服务器下的关联
- const int* 和 int const*的区别?
- 直接拿来用!最火的iOS开源项目