hdu 3652
来源:互联网 发布:平板电脑软件大全 编辑:程序博客网 时间:2024/06/07 15:44
总算自己套模版套出来一道 虽然是思维 不过代码比三维的精简
#include <iostream>#include <algorithm>#include <queue>#include <cstring>#include <cstdio>#include <vector>#include <string>#include <iterator>#include <cmath>#include <deque>#include <stack>#include <cctype>#include <iomanip>using namespace std;typedef long long ll;typedef long double ld;const int N = 10;const int INF = 0xfffffff;const double EPS = 1e-8;const ll MOD = 1e9 + 7;const ld PI = acos (-1.0);#define INFL 0x7fffffffffffffffLL#define met(a, b) memset(a, b, sizeof(a))#define put(a) cout << setiosflags(ios::fixed) << setprecision(a)ll n;int dp[15][20][10][2], bit[15];int calc (ll n);int dfs (int len, int mod, int pre, bool is13, bool ismax);int main (){ met (dp, -1); for (; cin >> n; cout << calc(n) << endl); return 0;}int calc (ll x){ int len = 0; for (;x; bit[len++] = x % 10, x /= 10); return dfs (len-1, 0, false, false, true);}int dfs (int len, int mod, int pre, bool is13, bool ismax){ if (len == -1) return is13 && ((mod + 13)% 13 == 0); if (!ismax && dp[len][mod][pre][is13] != -1) return dp[len][mod][pre][is13]; ll cnt = 0; int maxnum = ismax ? bit[len] : 9; for (int i=0; i<=maxnum; i++) cnt += dfs(len - 1, (mod * 10 + i) % 13, i, is13 || (pre == 1 && i == 3), ismax && i == maxnum); return ismax ? cnt : dp[len][mod][pre][is13] = cnt;}
0 0
- HDU 3652
- HDU 3652
- hdu 3652
- HDU 3652
- HDU 3652 B-number
- HDU 3652 数位DP
- hdu 3652 (counting)
- hdu 3652 数位DP
- hdu 3652 -数位dp
- 【数位DP】 【HDU 3652】
- HDU 3652 B-number
- hdu 3652 数位dp
- 数位DP HDU-3652
- HDU 3652 数位DP
- HDU 3652 数位DP
- hdu 3652 B-number
- HDU 3652 B-number
- HDU 3652 B-number
- Android中的Handler机制
- [android]_[初级]_[现有联系人中新增属性:如添加Phone Number, Email, address,Im ,Website, Organization, nickname,note]
- 关于如何用数组存储另一个数组的排序索引
- 排序之set集合排序
- maven学习笔记-03-maven安装篇
- hdu 3652
- 时间序列基础包xts
- android Handler 机制研究学习笔记
- 刘强东哈佛演讲
- 游承超:手机钢化玻璃膜平边与弧边的区别(1P)
- keepalived+redis 实现高可用的自动故障转移failover
- Android Handler机制
- poi操作excel初步
- hdu 1856 More is better