hdu3555 Bomb 数位DP入门
2024-08-25 08:33:30
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555
简单的数位DP入门题目
思路和hdu2089基本一样
直接贴代码了,代码里有详细的注释
代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
long long int dp[][];
void init()
{
dp[][]=;dp[][]=;dp[][]=;
for(int i=;i<;i++)
{
dp[i][]=dp[i-][]*-dp[i-][];//dp[i][0]表示长度为i的不含49的数的个数
dp[i][]=dp[i-][];//dp[i][1]表示长度为i的不含49且最高位为9的数的个数
dp[i][]=dp[i-][]*+dp[i-][];// dp[i][2]表示长度为i的含49 的数的个数
}
}
int bit[];
long long int solve(long long int n)
{
int len=;
while(n)
{
bit[len++]=n%;
n/=;
}
bit[len]=;
long long int ans=;
bool flag=;
for(int i=len;i>=;i--)
{
ans+=dp[i-][]*bit[i];
if(flag) ans+=dp[i-][]*bit[i];//如果高位已经出现49那么后面随意
if(flag== && bit[i]>) ans+=dp[i-][];
if(bit[i+]== && bit[i]== ) flag=; }
if(flag ) ans++;
return ans;
}
int main()
{
int t;
long long int n;
scanf("%d",&t);
init();
while(t--)
{
scanf("%I64d",&n); cout<<solve(n)<<endl;
}
return ;
}
最新文章
- 部署JProfiler监控tomcat
- smtplib.SMTPAuthenticationError: (535, b&#39;Error: authentication failed&#39;)解决办法
- Spring Application Event Example
- [读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性
- Android通过URL加载网络图片
- kindle paperwhite 使用说明
- C#操作Excel文件(转)
- IIS 7 支持10万并发请求
- Chapter 8 工厂方法模式
- HDU 1248 寒冰王座
- postgresql 在linux上的源码安装
- 微信小程序实例教程(四)
- Ubuntu16.04修改内核启动
- 在本地搭建play-with-docker
- ●UVA 10674 Tangents
- asp调用短信接口实现用户注册
- jquery倒计时按钮常用于验证码倒计时
- 利用setTimeout延时器 制作广告自动关闭
- BZOJ2618 [Cqoi2006]凸多边形 凸包 计算几何
- 【bzoj 1076】【SCOI2008】奖励关