HDU - 3652 数位dp水题

来源:互联网 发布:淘宝 css 显示代码 编辑:程序博客网 时间:2024/06/03 17:27

题意:

找到[1,n]中的满足数位上有子串13,且mod13 == 0的数字有多少个。

思路:

数位dp水题

代码:

#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;typedef long long ll;int a[20];ll dp[20][15][15][2];ll dfs(int pos, int mod, int pre, bool flag, bool limit) {if (pos == -1) {if (mod == 0 && flag) return 1;return 0;}if (!limit && dp[pos][mod][pre][flag] != -1) return dp[pos][mod][pre][flag];int up = limit ? a[pos] : 9;ll res = 0;for (int i = 0; i <= up; i++) {bool tag = flag | (pre == 1 && i == 3);res += dfs(pos - 1, (mod * 10 + i) % 13, i, tag, limit && a[pos] == i);}if (!limit) dp[pos][mod][pre][flag] = res;return res;}ll solve(ll x) {int pos = 0;while (x) {a[pos++] = x % 10;x /= 10;}return dfs(pos - 1, 0, 0, false, true);}int main() {int n;memset(dp, -1, sizeof(dp));while (scanf("%d", &n) != EOF) {printf("%lld\n", solve(n));}return 0;}


0 0
原创粉丝点击