HDU3555Bomb数位DP入门题目
来源:互联网 发布:我淘宝主营不超过80 编辑:程序博客网 时间:2024/05/20 10:52
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555
Bomb
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 6448 Accepted Submission(s): 2242
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?
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.
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
3150500
Sample Output
0115HintFrom 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.
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;long long dp[33][3];long long DP(long long N){ int bit[33]; N++; long long sum=0; int len=0; while(N){ bit[++len]=N%10; N/=10; } bit[len+1]=0; bool flag=0; for(int i=len;i>=1;i--){ sum+=dp[i-1][2]*bit[i]; if(!flag&&bit[i]>4) sum+=dp[i-1][1]; if(flag) sum+=dp[i-1][0]*bit[i]; if(bit[i+1]==4&&bit[i]==9) flag=1; } return sum;}void init(){ memset(dp,0,sizeof(dp));dp[0][0]=1; for(int 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(){ init(); int T; long long x; scanf("%d",&T); while(T--){ cin>>x; cout<<DP(x)<<endl; } return 0;}
0 0
- HDU3555Bomb数位DP入门题目
- hdu3555Bomb【数位dp入门题】
- HDU3555Bomb数位DP入门题
- hdu3555Bomb 数位dp
- hdu3555Bomb(记忆优化,数位dp)
- hdu3555Bomb(数位dp&&记忆化搜索)
- 数位dp基础题目
- HDU2089 不要62(数位DP入门经典题目)
- 数位DP入门题两枚
- 数位DP入门Ural1057
- hdoj_2089 【数位dp入门】
- 数位dp入门
- hdu3555 数位dp 入门
- HDU2089 数位dp入门
- HDU3555 数位DP入门!
- 数位DP入门题
- 数位dp入门详解
- 数位DP入门-SCOI2009
- VIM的编码相关,encoding, filecoding, termencoding
- 利用Solr完成向量乘以矩阵功能:以协同过滤算法ItemCF为例
- hdu1729
- 面向对象的分析与设计
- Junit4 Suit Test
- HDU3555Bomb数位DP入门题目
- Java的泛型,反射,注解
- 模板方法模式
- 爱阅读,经典编程图书分享
- 【端午小练】HDU1846-Brave Game
- javabean, ejb, entitybean的区别,以及POJO的概念
- 每日算法之二十五:Divide Two Integers
- 链表倒序
- linu串口编程入门