传送门

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;
}

  

最新文章

  1. C段渗透攻击必看的技术知识
  2. 用jsonp格式的数据进行ajax post请求变成get
  3. Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
  4. php学习01
  5. Android Studio 简单功能介绍
  6. getHibernateTemplate()的用法
  7. 设计模式学习系列9 外观模式Facade
  8. BM串匹配算法
  9. wget 使用技巧
  10. hdu_4046_Panda(树状数组)
  11. C++编程练习(4)----“实现简单的栈的链式存储结构“
  12. 前端到后台ThinkPHP开发整站(5)
  13. hive:导出数据记录中null被替换为\n的解决方案
  14. ASP.NET CORE系列【六】Entity Framework Core 之数据库迁移
  15. c/c++ linux epoll系列1 创建epoll
  16. 详细分析LoadRunner参数化
  17. L - The Shortest Path Gym - 101498L (dfs式spfa判断负环)
  18. 了解Python内存管理机制,让你的程序飞起来
  19. EBS中查看其他用户或所有用户的请求和输出文件
  20. 喵哈哈村的魔法考试 Round #4 (Div.2) 题解

热门文章

  1. Azure 项目构建 – 构建稳定的直播和点播教学系统
  2. js数组去重方法包括Es6(方法有很多,但是需要考虑兼容性和数据类型场景)
  3. 机器学习(3)- 学习建议&lt;误差出现如何解决?&gt;
  4. jQuery中ready方法的实现
  5. Web开发者必须知道的10个jQuery代码片段
  6. CPP-基础:windows api 多线程---互斥量、信号量、临界值、事件区别
  7. BestCoder Round#15 1001-Love
  8. web框架 http协议
  9. HDU-1009-肥鼠交易
  10. Centos忘记密码解决方法