传送门

gtm的数位dp!

看到好多题解,都是记忆化搜索,好像非常方便啊,但是我还是用递推好了,毕竟还是有些类似数位dp的题用递推的思路,记忆化做不了,现在多培养一下思路

首先这道题,

只看长度大于等于2的回文串,那么只需要看aa和aba两种即可,再长的话肯定会包括这两种情况。

定义状态:f[i][j][k]表示长度为i,第i位是j,第i-1位是k的不是回文数的个数

经过实践证明,直接求回文数个数好像真不是很好求。

然后各种细节的统计。

对于这种输入即为字符串的情况,我们可以先处理出一个半闭半开的区间的答案,再加上另一个数的贡献即可,而不需要先将R+1

#include <cstdio>
#include <cstring>
#include <iostream>
#define N 1005
#define p 1000000007
#define LL long long using namespace std; int n, d[N];
string L, R;
LL ans, f[N][10][10]; inline void init()
{
int i, j, k, l;
for(i = 2; i <= 1000; i++)
for(j = 0; j <= 9; j++)
for(k = 0; k <= 9; k++) if(j != k)
{
for(l = 0; l <= 9; l++)
if(l != k && l != j) f[i][j][k] += f[i - 1][k][l];
if(i - 1 == 1) f[i][j][k]++;
f[i][j][k] %= p;
}
} inline LL calc(string s)
{
int i, j, k, flag = 1, l = -1, ll = -1;
LL sum = 0, ret = 0;
n = s.length();
if(n == 1) return 0;
memset(d, 0, sizeof(d));
for(i = n; i >= 1; i--)
{
d[i] = s[n - i] - '0';
sum = (sum * 10 + d[i]) % p;
}
sum++;
ret = (ret + 10) % p;
for(i = 2; i < n; i++)
for(j = 1; j <= 9; j++)
for(k = 0; k <= 9; k++)
ret = (ret + f[i][j][k]) % p;
for(i = n; i >= 2; i--)
{
for(j = 0; j < d[i]; j++) if(!(i == n && !j))
for(k = 0; k <= 9; k++)
{
if(ll == j || l == j || l == k || j == k) continue;
ret = (ret + f[i][j][k]) % p;
}
if(ll == d[i] || l == d[i])
{
flag = 0;
break;
}
ll = l, l = d[i];
}
if(flag) for(i = 0; i <= d[1]; i++)
if(i != l && i != ll) ret = (ret + 1) % p;
return (sum - ret) % p;
} int main()
{
int i;
init();
cin >> L >> R;
ans = (calc(R) - calc(L) + p) % p;
for(i = 1; i < L.length(); i++)
if(L[i] == L[i - 1] || (i >= 2 && L[i] == L[i - 2]))
{
ans = (ans + 1) % p;
break;
}
printf("%lld\n", ans);
return 0;
}

  

[luoguP3413] SAC#1 - 萌数(数位DP)的更多相关文章

  1. LUOGU P3413 SAC#1 - 萌数(数位dp)

    传送门 解题思路 首先这道题如果有两个以上长度的回文串,那么就一定有三个或两个的回文串,所以只需要记录一下上一位和上上位填的数字就行了.数位\(dp\),用记忆化搜索来实现.设\(f[i][j][k] ...

  2. 洛谷P3413 SAC#1 - 萌数(数位dp)

    题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...

  3. 洛谷P3413 SAC#1 - 萌数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P3413 题目大意: 定义萌数指:满足"存在长度至少为2的回文子串"的数. 求区间 \([L,R]\) ...

  4. luogu 3413 SAC#1 - 萌数

    题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...

  5. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  6. 【BZOJ-1026】windy数 数位DP

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5230  Solved: 2353[Submit][Sta ...

  7. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  8. bzoj 1026 [SCOI2009]windy数 数位dp

    1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  9. luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索

    题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...

随机推荐

  1. uvm_factory——我们的工厂(一)

    factory 机制是实现(功能):通过一个字符串来创建此字符串所代表的的类的一个实例. //----------------------------------------------------- ...

  2. linux 删除文件后空间没有释放的解决办法

    清空没用的文件,当我删除文件后,发现可用空间沒有变化 os:centos4.7 现象: 发现当前磁盘空间使用情况: [root@ticketb ~]# df -hFilesystem          ...

  3. Linux下的I/O复用

    读书笔记 I/O复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要. Linux下实现I/O复用的系统调用主要有select, poll, epoll. select: 用户通过3个参数 ...

  4. js获取元素的页面坐标

    一.DOM中各种宽度.高度 二.DOM中的坐标系 JS获取div元素的宽度 offsetWidth=width+padding-left+padding-right+border-left+borde ...

  5. java25个Java机器学习工具&库

    本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法.这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用.Weka包括一系列的工具,如数据预 ...

  6. 洛谷 1164 小A点菜

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...

  7. 使用JavaScript ES6的新特性计算Fibonacci(非波拉契数列)

    程序员面试系列 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java Mar ...

  8. v-if与v-show的区别与选择

      v-if与v-show的区别与选择 官网给的区别 v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建. v-if也是惰性的:如果在初始渲染时条件 ...

  9. Philipp Wagner

    本文大部分来自OpenCV官网上的Face Reconition with OpenCV这节内容(http://docs.opencv.org/modules/contrib/doc/facerec/ ...

  10. Spring根据XML配置文件注入对象类型属性

    这里有dao.service和Servlet三个地方 通过配过文件xml生成对象,并注入对象类型的属性,降低耦合 dao文件代码: package com.swift; public class Da ...