数位DP HDU4734
来源:互联网 发布:sql求和 编辑:程序博客网 时间:2024/05/19 05:32
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<set>#include<map>#include<string>using namespace std;typedef long long ll;typedef unsigned long long ull;const ll INFF=1e12;const int INF=0x7f7f7f7f;ll bit[12];ll jie[12];void init()//初始化2和10的幂{ bit[0]=1; jie[0]=1; for(int i=1;i<=10;i++) { bit[i]=bit[i-1]*2; jie[i]=jie[i-1]*10; }}int sum(ll a)//求一个数位数{ if(a==0) return 1; int ans=0; while(a) { a/=10; ans++; } return ans;}ll solve(ll a)//求一个数的f(x){ if(a==0) return 0; int num=sum(a); ll ans=0; for(int i=0;i<=num-1;i++) { ans+=bit[i]*(a%10); a/=10; } return ans;}int a[12];int dp[12][100010];ll A;int dfs(int pos,int sum,int flag){ if(pos==-1) { return sum<=A; } if(sum>A) return 0; if(!flag&&dp[pos][A-sum]!=-1) return dp[pos][A-sum]; int up=flag?a[pos]:9; int ans=0; for(int i=0;i<=up;i++) { ans+=dfs(pos-1,sum+i*bit[pos],flag&&i==a[pos]); } if(!flag) dp[pos][A-sum]=ans; return ans;}int res(ll b){ int pos=0; while(b) { a[pos++]=b%10; b/=10; } return dfs(pos-1,0,1);}int main(){ init(); int t; int ca=1; scanf("%d",&t); memset(dp,-1,sizeof(dp)); while(t--) { ll a,b; scanf("%lld%lld",&a,&b); A=solve(a); printf("Case #%d: %d\n",ca++,res(b)); } return 0;}
阅读全文
1 0
- hdu4734之数位dp
- hdu4734(数位DP)
- hdu4734(数位DP)
- hdu4734(数位DP)
- hdu4734(数位DP)
- hdu4734数位dp
- hdu4734(数位dp)
- hdu4734(数位dp)
- hdu4734(数位dp)
- 数位DP HDU4734
- hdu4734,F(x), 数位dp
- hdu4734 F(x) 数位dp
- HDU4734 F(x) 数位DP
- hdu4734---F(x)(数位dp)
- hdu4734 F(x) 数位dp
- HDU4734 F(x) 数位DP
- [数位DP] HDU4734 F(x)
- hdu4734 F(x) (数位dp)
- 【Dubbo】windows下Dubbo安装及相关配置
- Linq语句实现(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
- Was应用服务器(Websphere)下,WEB-INF文件夹下xml文件的替换
- [人工智能]机器学习和深度学习库速查表
- c++ 实现狼人游戏
- 数位DP HDU4734
- Unity3D 游戏测试方法概述
- MFC 主界面函数中线程等待避免界面卡死的处理方法
- php导入导出
- 1、Spring Boot快速入门
- 链表排序
- centos安装MySQLdb,及相关问题解决方法
- 对于初学者一篇非常形象的进程与线程解读
- C#语法:委托与方法