博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2089 不要62 【数位DP】
阅读量:7001 次
发布时间:2019-06-27

本文共 1260 字,大约阅读时间需要 4 分钟。

题目链接:

数位DP模板题。測试板子

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define N 12using namespace std;int bit[N];int dp[N][3];/* dp[i][0]:前i位不含不吉利数的个数。

   dp[i][1]:前i位不含不吉利数且i+1位是6的个数。

  dp[i][2]:前i位含不吉利数的个数。 */

int dfs(int pos, int st, bool flag) { if (pos == 0)return st == 2; if (flag&&dp[pos][st] != -1)return dp[pos][st]; int ans = 0; int u = flag ?

9 : bit[pos]; for (int d = 0;d <= u;d++) { if (st == 2 || d == 4 || (st == 1 && d == 2)) ans += dfs(pos - 1, 2, flag || d<u); else if (d == 6) ans += dfs(pos - 1, 1, flag || d<u); else ans += dfs(pos - 1, 0, flag || d<u); } if (flag) dp[pos][st] = ans; return ans; } int solve(int n) { int len = 0; while (n) { bit[++len] = n % 10; n /= 10; } return dfs(len, 0, 0); } int main() { int n, m; memset(dp, -1, sizeof(dp)); while (~scanf("%d%d", &n, &m)) { if (!(n || m))return 0; printf("%d\n", m - n + 1 - (solve(m) - solve(n - 1))); } return 0; }

转载地址:http://fgevl.baihongyu.com/

你可能感兴趣的文章
关于庖丁分词
查看>>
JavaScript 数组去重并统计重复元素出现的次数
查看>>
ZJOI2002昂贵的聘礼题解
查看>>
Java并发:多线程和java.util.concurrent并发包总结
查看>>
【msdn wpf forum翻译】获取当前窗口焦点所在的元素
查看>>
1tb等于多少g 1TB和500G有什么区别
查看>>
收购/代理游戏或其它成熟的在线应用
查看>>
让人难以置信的HTML5和JavaScript实验
查看>>
远程访问linux的利器 NXFree
查看>>
C++11 正则表达式——基础知识介绍
查看>>
潜移默化学会WPF(样式)-- DataGrid(转载)
查看>>
C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
查看>>
mongo-mapreduce测试(6)——综合测试
查看>>
利用top构造Sql Server分页查询
查看>>
java 整体知识架构
查看>>
PHP验证码
查看>>
对象序列化与反序列化(二进制 byte[])
查看>>
在同一张表存在多条记录,只修改最近的一条
查看>>
Hudson可扩展持续集成引擎
查看>>
显示系统托盘列表(并执行隐藏与显示)
查看>>