HDU 3555 Bomb(数位dp)
2016-02-23 23:14
357 查看
题目链接:【HDU 3555】
求出1~n(1 <= N <= 2^63-1)数字包含49的有多少个
神奇的数位dp
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define ll __int64
int t, arr[25];
ll dp[25][3];
/*
dp[i][0]:位数为i,没有49
dp[i][1]:9开头的,没有49
dp[i][2]:有49
*/
void init()
{
dp[0][0]=1;
for(int i=1; i<=22; 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][2]*10+dp[i-1][1];
}
}
ll solve(ll x)
{
int len = 0;
while(x)
{
arr[++len] = x%10;
x/=10;
}
arr[len+1] = 0;
ll ans=0, flag=0;
for(int i=len; i>=1; i--)
{
ans += dp[i-1][2]*arr[i];
if(flag) ans+=dp[i-1][0]*arr[i];
if(!flag && arr[i]>4) ans+=dp[i-1][1];
if(arr[i+1]==4 && arr[i]==9) flag=1;
}
return ans;
}
int main()
{
init();
scanf("%d", &t);
while(t--)
{
ll n;
scanf("%I64d", &n);
printf("%I64d\n", solve(n+1));
}
return 0;
}
求出1~n(1 <= N <= 2^63-1)数字包含49的有多少个
神奇的数位dp
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define ll __int64
int t, arr[25];
ll dp[25][3];
/*
dp[i][0]:位数为i,没有49
dp[i][1]:9开头的,没有49
dp[i][2]:有49
*/
void init()
{
dp[0][0]=1;
for(int i=1; i<=22; 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][2]*10+dp[i-1][1];
}
}
ll solve(ll x)
{
int len = 0;
while(x)
{
arr[++len] = x%10;
x/=10;
}
arr[len+1] = 0;
ll ans=0, flag=0;
for(int i=len; i>=1; i--)
{
ans += dp[i-1][2]*arr[i];
if(flag) ans+=dp[i-1][0]*arr[i];
if(!flag && arr[i]>4) ans+=dp[i-1][1];
if(arr[i+1]==4 && arr[i]==9) flag=1;
}
return ans;
}
int main()
{
init();
scanf("%d", &t);
while(t--)
{
ll n;
scanf("%I64d", &n);
printf("%I64d\n", solve(n+1));
}
return 0;
}
相关文章推荐
- 24-2015年终总结
- ORACLE体系结构-ASMM子自动共享管理内存
- 3.单例模式
- 又读Thinking in Java
- linux network command
- 网页Input特效让Input更美观
- [iOS]SourceTree+oschina实现代码远程托管
- 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的
- 异常记录——java.util.ConcurrentModificationException
- 【Java】官网中方法的值传递和引用传递
- iOS keychain入门
- 【转】JAVA之网络编程
- GCD(Grand Center Dispatch)使用详解
- 坑爹的工行一代U盾
- php 通过http user-agent判断是否为手机浏览器
- 传真知识总结
- Mybatis的<where><foreach><set>等标签详解
- PAT-1010 一元多项式求导
- eval
- JAVA JVM 原理