HDOJ 3555 Bomb
来源:互联网 发布:2017淘宝骗保师 编辑:程序博客网 时间:2024/05/29 11:24
数位DP的DFS写法。。。。
Bomb
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 4630 Accepted Submission(s): 1614
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
3
1
50
500
1
50
500
Sample Output
0
1
15
1
15
Hint
From 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
Recommend
zhouzeyong
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long int LL;
int bit[30];
LL dp[25][3];
LL dfs(int pos,int s,bool limit)
{
if(pos==-1)
return s==2;
if(limit==false&&~dp[pos][s])
return dp[pos][s];
int end=limit?bit[pos]:9;
LL ans=0;
for(int i=0;i<=end;i++)
{
int news=s;
if(s==0&&i==4) news=1;
if(s==1&&i!=9) news=0;
if(s==1&&i==9) news=2;
if(s==1&&i==4) news=1;
ans+=dfs(pos-1,news,limit&&i==end);
}
if(!limit)
return dp[pos][s]=ans;
else
return ans;
}
int main()
{
LL n;
int T;
memset(dp,-1,sizeof(dp));
scanf("%d",&T);
while(T--)
{
scanf("%I64d",&n);
int len=0;
while(n)
{
bit[len++]=n%10;
n/=10;
}
printf("%I64d\n",dfs(len-1,0,1));
}
return 0;
}
* This source code was highlighted by YcdoiT. ( style: Codeblocks )#include <cstdio>
#include <cstring>
using namespace std;
typedef long long int LL;
int bit[30];
LL dp[25][3];
LL dfs(int pos,int s,bool limit)
{
if(pos==-1)
return s==2;
if(limit==false&&~dp[pos][s])
return dp[pos][s];
int end=limit?bit[pos]:9;
LL ans=0;
for(int i=0;i<=end;i++)
{
int news=s;
if(s==0&&i==4) news=1;
if(s==1&&i!=9) news=0;
if(s==1&&i==9) news=2;
if(s==1&&i==4) news=1;
ans+=dfs(pos-1,news,limit&&i==end);
}
if(!limit)
return dp[pos][s]=ans;
else
return ans;
}
int main()
{
LL n;
int T;
memset(dp,-1,sizeof(dp));
scanf("%d",&T);
while(T--)
{
scanf("%I64d",&n);
int len=0;
while(n)
{
bit[len++]=n%10;
n/=10;
}
printf("%I64d\n",dfs(len-1,0,1));
}
return 0;
}
0 0
- 【DP】 HDOJ 3555 Bomb
- HDOJ 3555 Bomb
- HDOJ 3555 Bomb
- 【HDOJ 3555】Bomb
- HDOJ 3555 Bomb
- HDOJ 3555 Bomb
- hdoj-【3555 Bomb】
- hdoj 3555 Bomb
- hdoj 3555 BOMB(数位dp)
- HDOJ 3555 Bomb 【数位dp】
- hdoj 3555 Bomb 【数位dp】
- HDOJ 题目3555 Bomb(数位dp)
- HDOJ 题目3555 Bomb(数位dp)
- HDOJ 题目3555 Bomb(数位DP)
- hdoj 3622 Bomb Game
- HDOJ 3622 Bomb Game
- hdoj 5934 Bomb
- hdoj 3555 Bomb/ hdoj 3652 B-number 数位DP 初解禁!!
- 2013 北京 QCon热点分享
- OpenCV学习笔记[1]初探OpenCV
- POJ 1260 Pearls
- Spread Studio中文支持图解
- 自定义取值距离的javascript random()函数
- HDOJ 3555 Bomb
- Spread for ASP.NET 7新功能使用指南
- POJ 2029 Get Many Persimmon Trees
- iOS多线程实现3种方式
- XDU 1161 - 科协的数字游戏II
- Spread for Windows Forms 7新功能使用指南
- XDU 1160 - 科协的数字游戏I
- HDOJ 3652 B-number
- Spread for WPF-Silverlight 新功能使用指南
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
安全隐患台帐
台账和台帐的区别
物业管理台帐
台帐怎么做
台帐是什么
台帐是什么意思
台帐与台账的区别
台账是什么
什么是台账
台账怎么做
台账模板
台账
带帽
前进帽
快克焊台
台扇
美的台扇价格
台扇不转是什么原因
艾美特台立扇s314at2
台扇批发
空调扇多少钱一台
美的台扇
台扇图片
无扇叶风扇
壁扇
趴地扇
落地扇
美的台扇配件
电风扇启动电容
钻石风扇
变频电风扇
变频风扇
遥控风扇
台式风扇
充电电风扇
离子风扇
小型风扇
钻石牌风扇
金羚风扇
申花风扇
小电风扇