第一道数位dp,属于基础模板,又自卑小时没学好数数了,只是不清楚为什么大家的dp定义都是相同的,很显然么,难道我写的是怪胎。。。

/*
ID:esxgx1
LANG:C++
PROG:hdu3555
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;#define LN    21
unsigned long long dp[LN + 1][3];void work(int ln)
{dp[0][0] = 1;for(int i=1; i<=ln; ++i) {dp[i][0] = dp[i-1][0] * 9 + dp[i-1][1] * 8;    // 无49,开头无9dp[i][1] = dp[i-1][0] + dp[i-1][1];            // 无49, 开头是9dp[i][2] = dp[i-1][2] * 10 + dp[i-1][1];    // 有49
//        printf("i=%d, %I64u %I64u %I64u\n", i, dp[i][0], dp[i][1], dp[i][2]);
    }
}unsigned long long solve(int i, unsigned long long N, int &extra)
{unsigned long long prefix = N/10;int curr = N % 10;int extra0 = extra;unsigned long long rslt = N % 10 * dp[i-1][2];if (curr >= 9 && prefix % 10 == 4) extra = 1;if (prefix) rslt += solve(i+1, prefix, extra0);if (extra0) {rslt += curr * (dp[i-1][0] + dp[i-1][1]);extra = 1;} else if (curr > 4) rslt += dp[i-1][1];return rslt;
}int main(void)
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endifint T;cin >> T;if (T) {work(LN);do {unsigned long long N;cin >> N;int extra = 0;cout << solve(1, N, extra) + (extra ? 1 : 0)<< endl;--T;}while(T);}return 0;
}

2014-07-31 20:55:00 Accepted 3555 156MS 348K 1257 B G++

转载于:https://www.cnblogs.com/e0e1e/p/hdu_3555.html

HDU 3555 - Bomb相关推荐

  1. HDU 3555 Bomb (数位DP)

    数位dp,主要用来解决统计满足某类特殊关系或有某些特点的区间内的数的个数,它是按位来进行计数统计的,可以保存子状态,速度较快.数位dp做多了后,套路基本上都差不多,关键把要保存的状态给抽象出来,保存下 ...

  2. HDU 3555: Bomb

    ///@link http://acm.hdu.edu.cn/showproblem.php?pid=3555///@author Sycamore///@date Sep, 14///@ref ku ...

  3. HDU 3555 Bomb(数位DP模板啊两种形式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...

  4. HDU 3555 Bomb (数位DP-记忆化搜索模板)

    题意 求区间[1,n]内含有相邻49的数. 思路 比较简单的按位DP思路.这是第一次学习记忆化搜索式的数位DP,确实比递推形式的更好理解呐,而且也更通用~可以一般化: [数位DP模板总结] int d ...

  5. HDU 3555 Bomb

    模板题 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll num; int a[20],len; ...

  6. HDU - 3555 Bomb(数位dp)

    题目链接:点击查看 题目大意:给定一个整数n,求从1到n的闭区间内含有相邻"49"的数字的个数. 题目分析:裸的数位dp,这里说一下两种做法,第一种是正着求,也就是求含有49的数字 ...

  7. [HDU 3555] Bomb

    dp[dep][four]表示长度为dep的上一个是否为4的不含子串49的数的个数 1 #include<bits/stdc++.h> 2 using namespace std; 3 t ...

  8. Bomb HDU - 3555【数位dp】

    Bomb HDU - 3555 The counter-terrorists found a time bomb in the dust. But this time the terrorists i ...

  9. Bomb(hdu 3555)

    题意:给定一个闭区间,求区间内有多少数中含"49" /*dp[i][j]表示i位数以j为最高位位中的所有不符合数的个数.然后把数字拆分,乱搞即可. */ #include<c ...

最新文章

  1. 改变程序员的一本书 | 每日趣闻
  2. 如何使用C或C ++获取目录中的文件列表?
  3. 秒懂机器学习---朴素贝叶斯
  4. Ubuntu 18.04 美化mac主题
  5. 阿里云混合云的政企上云新路径
  6. java 打印三维数组_Java基础第三天_数组
  7. BugkuCTF-MISC题普通的二维码
  8. win7安装python3.6_Win7 64位下python3.6.5安装配置图文教程
  9. WPF - 属性系统 (4 of 4)
  10. centos引导过程中的故障排除
  11. 关于电脑软件的一些实用推荐(二)
  12. Discuz X3.4版块规则支持html代码修改
  13. java常用的组件和框架总结
  14. 趣键盘霸榜App Store七天,下一个趣头条诞生?
  15. 明御运维审计与风险控制系统远程桌面(server2012、2016系统)报错error:NLA or TLS security negotiation failure, Please check...
  16. 暑假视力如何保护?护眼台灯可以保护视力
  17. 普元:解读歼-20背后的国家安全重要领域信息化跨越
  18. 计算机函数sumif求平均值,Excel中如何用SUMIF函数实现按指定条件求平均值
  19. python arcgis 批量裁剪栅格文件
  20. 【数字图像处理matlab】(HSI变换融合算法)

热门文章

  1. 在android中使用USB进行通信的4种方法
  2. 联想Z5手机夺得京东销量第一,联想这是要翻盘的节奏吗?
  3. Rolling Update - 每天5分钟玩转 Docker 容器技术(140)
  4. 与草原有关的几张照片
  5. java jolt tuxedo_java使用jolt调用tuxedo服务
  6. 代码统计工具有哪几种_跟我学“Linux”小程序Web版开发(四):引入统计及Crash收集...
  7. 三菱a系列motion软体_三菱M70A/64SM重要功能比较
  8. openssl 添加自定义算法_GitHub:用PyTorch实现17种深度强化学习算法
  9. sql between包括两端吗_SQL大全
  10. android 绕过root检测,公主连结怎么绕过root检测 绕过root检测方法一览