HDU 3555 Bomb
2014-09-23 07:42
330 查看
Bomb
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 7907 Accepted Submission(s): 2774
Problem Description
The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence "49", the power of the blast would
add one point.
Now the counter-terrorist knows the number N. They want to know the final points of the power. Can you help them?
Input
The first line of input consists of an integer T (1 <= T <= 10000), indicating the number of test cases. For each test case, there will be an integer N (1 <= N <= 2^63-1) as the description.
The input terminates by end of file marker.
Output
For each test case, output an integer indicating the final points of the power.
Sample Input
3 1 50 500
Sample Output
0 1 15 HintFrom 1 to 500, the numbers that include the sub-sequence "49" are "49","149","249","349","449","490","491","492","493","494","495","496","497","498","499", so the answer is 15.
Author
fatboy_cw@WHU
Source
2010 ACM-ICPC Multi-University
Training Contest(12)——Host by WHU
解题思路:数位DP,dp[i][0]表示长度为i且不含49的数的个数,dp[i][1]代表长度为i且不含49,但是首位为9的数的个数,dp[i][2]代表长度为i且含49的数的个数
具体状态转移和数字分解见代码
#include<iostream> #include<cstdio> #include<cstring> using namespace std; long long dp[22][3]; void DP() { int i; memset(dp,0,sizeof(dp)); dp[0][0]=1; for(i=1;i<=20;i++) { dp[i][0]=dp[i-1][0]*10-dp[i-1][1]; dp[i][1]=dp[i-1][0]; dp[i][2]=dp[i-1][1]+dp[i-1][2]*10; } } int main() { int i,t,num[20],k,last; long long n,ans; DP(); scanf("%d",&t); while(t--) { ans=last=0;k=1; memset(num,0,sizeof(num)); scanf("%I64d",&n); n++; while(n) { num[k++]=n%10; n/=10; } k--; bool flag=false; for(i=k;i>=1;i--) { ans+=dp[i-1][2]*num[i]; if(flag) { ans+=dp[i-1][0]*num[i]; } if(!flag && num[i]>4) { ans+=dp[i-1][1]; } if(last==4 && num[i]==9) { flag=true; } last=num[i]; } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- HDU 3555 - Bomb
- 数位DP-HDU-3555-Bomb
- 【数位DP】 HDU 3555 Bomb
- HDU - 3555 bomb(数位DP) HQG_AC的博客
- hdu 3555 Bomb(不要49,数位DP)
- HDU 3555 Bomb (数位DP)
- hdu 3555 Bomb(数位dp)
- hdu 3555 Bomb(数位dp)
- HDU3555——Bomb(数位dp入门)
- Bomb(HDU 3555 数位DP)
- hdu_3555_Bomb(数位DP)
- HDU 3555 Bomb(数位DP)
- HDU 3555 Bomb
- hdu3555——Bomb(数位dp)
- HDU 3555 Bomb 详解(数位DP入门题)
- HDU 3555 Bomb(1-n含有“49”的数字个数)
- hdu_3555 bomb
- HDU-3555 Bomb
- HDU-3555 Bomb 数位DP
- HDU 3555 Bomb (数位DP)