HDU-4724-数位dp
来源:互联网 发布:江南证券软件下载 编辑:程序博客网 时间:2024/05/22 06:33
题目大意:定义f(x),并给出a和r,问在(0,r)有几个数的f(x)值小于等于f(a);
题目解析:定义dp[i][j]表示枚举到第i位,j表示f(a)与当前和的差值;
AC代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>using namespace std;int dp[12][10010],n,m,num[12],all;int f(int x){if(x==0)return 0;int ans=f(x/10);return ans*2+x%10;}int dfs(int pos,int sum,bool limit){if(pos==-1)return sum<=all;if(sum>all)return 0;if(!limit&&dp[pos][all-sum]!=-1)return dp[pos][all-sum];int u=limit?num[pos]:9;int ans=0;for(int i=0;i<=u;i++){ans+=dfs(pos-1,sum+i*(1<<pos),limit&&i==num[pos]);} if(!limit)return dp[pos][all-sum]=ans;return ans;} int cal(int x){int pos=0;while(x){num[pos++]=x%10;x/=10;}return dfs(pos-1,0,true);}int main(){memset(dp,-1,sizeof(dp));int cas,c=1;scanf("%d",&cas);while(cas--){int u;scanf("%d",&u);all=f(u);scanf("%d",&m);printf("Case #%d: %d\n",c++,cal(m));}}
0 0
- HDU-4724-数位dp
- hdu 3555 数位dp
- hdu 3555 数位dp
- HDU 3652 数位DP
- HDU 3555 数位DP
- HDU 3555 \数位DP
- HDU 2089 数位DP
- hdu 3555 数位DP
- hdu 3709 数位DP
- hdu 4352 数位DP
- HDU 3886 数位DP
- HDU 3555 数位DP
- hdu 3555 数位DP
- hdu 3652 数位DP
- hdu 3709 数位DP
- hdu 4352 数位DP
- hdu 4507 数位DP
- hdu 3652 -数位dp
- 位运算
- 私有Android
- 73-进程间传递描述符(概述)
- Android串口开发入门
- ubunut 安装winehq + 官网轻聊版QQ
- HDU-4724-数位dp
- Android Transition
- Jenkins入门系列之——02第二章 Jenkins安装与配置
- java jdk 环境变量配置
- /bin/bash^M: bad interpreter: 没有那个文件或目录
- 53 Maximum Subarray
- ionic2中选取相册图片并支持多附件上传的
- Android PopupWindow的使用
- tensorflow实例-多层感知器