HDU-2089-不要62(数位DP)
来源:互联网 发布:TS是什么画图软件 编辑:程序博客网 时间:2024/06/10 20:48
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
题意:求[L,R]间数字中不含4和62的个数
题解:数位DP
CODE:
#include <bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3fint dp[10][5];///dp[i][j]:int a[20];int solve(int x){ int len=0,ans=0,flag=0; int p=x; while(x){a[++len]=x%10;x/=10;} for(int i=len; i>0; --i) { ans+=dp[i-1][2]*a[i]; if(flag){ans+=dp[i-1][0]*a[i];continue;} if(a[i]>4)ans+=dp[i-1][0]; if(i<len&&a[i]>2&&a[i+1]==6)ans+=dp[i-1][0]; if(a[i]>6)ans+=dp[i-1][1]; if(a[i]==4||(i<len&&a[i]==2&&a[i+1]==6)){flag=1;} } return p-ans-flag;}//dp[i][0] : 长i合法//dp[i][1] : 最高2长2合法//dp[i][2] : 长i非法int main(){ int a,b; dp[0][0]=1; for(int i=1; i<=7; ++i) { dp[i][0]=dp[i-1][0]*9-dp[i-1][1]; dp[i][1]=dp[i-1][0]; dp[i][2]=dp[i-1][2]*10+dp[i-1][0]+dp[i-1][1]; } while(scanf("%d%d",&a,&b)!=EOF) { if(a==b&&b==0)break; printf("%d\n",solve(b)-solve(a-1)); } return 0;}/*1 1000 0*/
0 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)
- HDU 2089 不要62 (数位DP)
- hdu 2089 不要62(数位dp)
- hdu 2089 不要62 (数位DP)
- 【HDU 2089】不要62(数位dp)
- HDU-2089 不要62 (数位DP)
- hash算法
- 怎样进行ssm 的整合(spring+springmvc+mabatis)
- adb查看设备的时候,显示 List of devices attached
- iOS开发中单例设计模式、通知中心的使用
- scanf()、getch()、getchar()、getc()、gets()、gets_s()
- HDU-2089-不要62(数位DP)
- Android进阶之路-接口回调(一)
- [Unity]游戏内查看BundleVersion版本号.
- 价格计算工具类
- linux后台进程管理Supervisor
- leetcode[6] ZigZag Conversion
- JDK1.5/1.6/1.7之新特性(二)实践篇
- 随机数的最大值
- hdu 1075