HDU 2089 不要62 还是基础数位dp
来源:互联网 发布:淘宝贷利息多少 编辑:程序博客网 时间:2024/04/30 21:28
不含4,并且不含62的数被称为吉祥数,题意就是给你一个区间,要你求这个区间里一共有多少个吉祥数
#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;int dp[21][4];void init(){ memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int i=1;i<=6;i++) { dp[i][0]=dp[i-1][0]*9-dp[i-1][1]; // 不含62和4 dp[i][1]=dp[i-1][0]; //不含62和4但是以2开头 dp[i][2]=dp[i-1][2]*10+dp[i-1][1]+dp[i-1][0]; // 含有62或4的个数 }}int slove(int x){ int bit[1000],len=0,flag=0,ans=0,temp=x; while(x) { bit[++len]=x%10; x/=10; } bit[len+1]=0; for(int i=len;i>0;i--) { ans+=dp[i-1][2]*bit[i]; if(flag) ans+=dp[i-1][0]*bit[i]; if(!flag && bit[i]>4) ans+=dp[i-1][0]; if(!flag && bit[i]>6 ) ans+=dp[i-1][1]; if(!flag && bit[i+1]==6 & bit[i]>2) ans+=dp[i][1]; if(bit[i]==4 || (bit[i]==2 && bit[i+1]==6)) flag=1; } return temp-ans;}int main(){ init(); int a,b; while(~scanf("%d%d",&a,&b),a+b) { int len1,len2; len1=len2=0; printf("%d\n",slove(b+1)-slove(a)); } return 0;}
- HDU 2089 不要62 还是基础数位dp
- hdu 2089 不要62 基础数位DP
- (hdu 2089 不要62)<基础数位DP>
- hdu 2089 不要62 数位DP
- hdu 2089 不要62 数位dp
- hdu 2089 不要62 数位dp
- hdu 2089 不要62(数位dp入门)
- [HDU 2089]不要62[数位DP]
- hdu 2089 不要62(数位dp)
- Hdu 2089 不要62 (暴力/数位dp)
- hdu 2089 不要62 (数位DP)
- HDU 2089 不要62 数位dp入门
- hdu 2089(不要62)数位DP
- 【数位DP】【HDU 2089】不要62
- hdu 2089 不要62(数位DP)
- hdu 2089 不要62 --- 数位dp
- 数位DP小记 + HDU 2089 不要62
- HDU 2089 不要62(数位dp)
- day08
- 设置登录账号只有查看Microsoft SQL Server Management Studio左边目录树的权限
- 校门外的树
- day09
- day10
- HDU 2089 不要62 还是基础数位dp
- day11
- linux常用命令
- day12
- day13
- day14
- day15
- day16
- day17