dp[i][j][k]表示第i位填数字k时,与后面的相连模数为j时,后面的数字最小填多少。

测得我提心吊胆还以为复杂度高了,结果出来46ms还是cf评测姬强啊。

  1. #pragma comment(linker, "/STACK:1024000000,1024000000")
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <ctime>
  7. #include <cctype>
  8. #include <climits>
  9. #include <iostream>
  10. #include <iomanip>
  11. #include <algorithm>
  12. #include <string>
  13. #include <sstream>
  14. #include <stack>
  15. #include <queue>
  16. #include <set>
  17. #include <map>
  18. #include <vector>
  19. #include <list>
  20. #include <fstream>
  21. #include <bitset>
  22. #define init(a, b) memset(a, b, sizeof(a))
  23. #define rep(i, a, b) for (int i = a; i <= b; i++)
  24. #define irep(i, a, b) for (int i = a; i >= b; i--)
  25. using namespace std;
  26. typedef double db;
  27. typedef long long ll;
  28. typedef unsigned long long ull;
  29. typedef pair<int, int> P;
  30. const int inf = 0x3f3f3f3f;
  31. const ll INF = 1e18;
  32. template <typename T> void read(T &x) {
  33. x = 0;
  34. int s = 1, c = getchar();
  35. for (; !isdigit(c); c = getchar())
  36. if (c == '-') s = -1;
  37. for (; isdigit(c); c = getchar())
  38. x = x * 10 + c - 48;
  39. x *= s;
  40. }
  41. template <typename T> void write(T x) {
  42. if (x < 0) x = -x, putchar('-');
  43. if (x > 9) write(x / 10);
  44. putchar(x % 10 + '0');
  45. }
  46. template <typename T> void writeln(T x) {
  47. write(x);
  48. puts("");
  49. }
  50. const int maxn = 1e3 + 5;
  51. char str[maxn];
  52. int p, st, m;
  53. int dp[maxn][maxn][10], Tenpow[maxn];
  54. int main() {
  55. scanf("%s%d", str + 1, &p);
  56. int n = strlen(str + 1);
  57. for (int i = 1, t = 1; i <= n; i++, t = t * 10 % p) Tenpow[n - i + 1] = t;
  58. init(dp, -1);
  59. rep(i, 0, 9)
  60. dp[n + 1][0][i] = 0;
  61. irep(i, n + 1, 2)
  62. irep(j, p - 1, 0) {
  63. if (i == n + 1 && j) continue;
  64. rep(k, 0, 9) {
  65. if (dp[i][j][k] == -1) continue;
  66. if (str[i - 1] != '?') {
  67. int d = str[i - 1] - '0';
  68. dp[i - 1][(d * Tenpow[i - 1] % p + j) % p][d] = k;
  69. } else {
  70. rep(t, 0, 9) {
  71. dp[i - 1][(t * Tenpow[i - 1] % p + j) % p][t] = k;
  72. }
  73. }
  74. break;
  75. }
  76. }
  77. rep(i, 1, 9)
  78. if (dp[1][0][i] >= 0) {
  79. st = i;
  80. break;
  81. }
  82. if (st) {
  83. rep(i, 1, n) {
  84. printf("%d", st);
  85. int d = st;
  86. st = dp[i][m][d];
  87. m = (m - d * Tenpow[i] % p + p) % p;
  88. }
  89. } else puts("*");
  90. return 0;
  91. }

GYM 101889E(dp)的更多相关文章

  1. Gym - 100989M(dp)

    George met AbdelKader in the corridor of the CS department busy trying to fix a group of incorrect e ...

  2. GYM 101933A(dp)

    要点 \(\sum{w_i} <= 1e8\)是有意味的. 设\(dp[i]\)为至少可以承受重量\(i\)的最大可达高度.转移时可以转移的\(j\)必须满足加上它之后得保证各层不能超重,所以\ ...

  3. GYM 101673G(dp)

    dp[i][j][0/1]:第i天处于第j状态要不要吃. const int maxn = 1e2 + 5; int n, a[maxn], b[maxn]; int dp[maxn][maxn][2 ...

  4. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  5. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  6. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  7. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  8. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  9. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

随机推荐

  1. 千锋很火的SpringBoot实战开发教程视频

    springboot是什么? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  2. python多进程执行任务

    https://blog.csdn.net/qq_39694935/article/details/84552076 [Python]multiprocessing Pool 进程间通信共享 直接上代 ...

  3. HTML layout高仿QQ GUI

    1. [图片] QQ20130804162049.png ​2. [代码]AAuto 代码     import win.ui;import web.layout;/*DSG{{*/winform = ...

  4. tomcat启动项目被重新加载,导致资源初始化两遍

    之前没有遇到过这个问题,配了三天的项目了,惊人啊!!!各种怪问题全被我赶上了.真有种骂人的冲动. tomcat启动项目时,项目资源被加载两遍. 原因:配置虚拟目录导致,项目被重新加载. <Hos ...

  5. 百度API从经纬度坐标到地址的转换服务

    /// <summary> /// 百度API从经纬度坐标到地址的转换服务 /// </summary> /// <param name="lng"& ...

  6. [APIO 2017] 商旅

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5367 [算法] 很明显的分数规划问题 预处理从一个点走到另一个点所获最大利润和最短路 ...

  7. LuoguP4861 按钮

    传送门 这题一眼看上去要解\(k^x \equiv 1(mod\ m)\)的最小正整数解. 于是我打了一个扩展BSGS 这题这样做算的答案一直是0的.不过有另一个定理欧拉定理,\(k^{\varphi ...

  8. VC解析XML--使用CMarkup类解析XML

    经过今天尝试MFC解析XML串,也算有了不少收获,总结一下.         我是使用的CMarkup类对XML进行操作.                  CMarkup好象都是先从一个xml文件里 ...

  9. Numbers Exchange

    题意: Eugeny有n张卡片,他希望和Nikolay交换一些卡片使得他拥有的奇数数字和偶数数字的卡片数目一样,且所有数字都不同. Nikolay有m张卡片,分别写着1到m.问最少交换几次,能够满足要 ...

  10. c++中stl----vector

    1 vector是啥玩意 (1)可以使用下标访问个别的元素 (2)迭代器可以按照不同的方式遍历 (3)可以在容器的末尾增加或者删除元素 2 容器大小和容器的容量区别 (1)大小是元素的个数,容量是分配 ...