HDU - 3652 数位dp水题
2017-02-14 22:16
302 查看
题意:
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3652找到[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; }
相关文章推荐
- HDU 1087 Super Jumping! Jumping! Jumping! DP 水题, 没能水过
- 序列遍历hdu 4545(水题,不是DP)
- Hdu 1978 How many ways 二维dp水题。。
- hdu 1520 Anniversary party 树形dp水题
- hdu 1561 The more, The Better 树形dp水题
- HDU 3076 ssworld VS DDD DP 概率水题
- hdu 5569(二维dp,水题)
- HDU 1231 最大连续子序列( DP做法 + 水题做法)
- HDU 2196 Anniversary party (树形DP 水题)
- HDU 2069 & UVA 674 Coin Change(换硬币 dp 入门经典水题,背包问题)
- hdu 4679 Terrorist’s destroy 树形dp水题 (2013多校联合)
- HDU 1520 Anniversary party 树DP水题
- 数塔 - HDU 2084 水题dp
- POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题
- hdu 3555 数位dp水题 记忆化搜索做法
- HDU 1159 Common Subsequence DP 又一道水题
- HDU 1520 Anniversary party / 树形DP水题!!!
- hdu1300(水题也是dp)
- hdu 1561 The more, The Better 树形dp水题
- HDU 2089 数位dp水题 统计区间中不包含62 和 4 的个数