hdu3652 B-number 数位dp
来源:互联网 发布:ipv6 墙 知乎 编辑:程序博客网 时间:2024/05/20 09:11
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=3652
题意:
给出一个数n,求从1到n范围内的数字含有子串13且能被13整除的个数
思路:
数位dp,再加一维取模的状态,我对动态规划好迷啊。。。
#include <bits/stdc++.h>using namespace std;const int N = 50 + 10;int dp[N][13][2][2];int dig[N];int dfs(int pos, int mod, bool pre, bool status, bool limit){ if(pos < 1) return mod == 0 && status; if(! limit && dp[pos][mod][pre][status] != -1) return dp[pos][mod][pre][status]; int en = limit ? dig[pos] : 9; int ans = 0; for(int i = 0; i <= en; i++) ans += dfs(pos-1, (mod*10+i) % 13, i == 1, status || (pre == 1 && i == 3), limit && i == en); if(! limit) dp[pos][mod][pre][status] = ans; return ans;}int work(int n){ int tot = 0; while(n) dig[++tot] = n % 10, n /= 10; memset(dp, -1, sizeof dp); return dfs(tot, 0, 0, 0, 1);}int main(){ int n; while(~ scanf("%d", &n)) printf("%d\n", work(n)); return 0;}
#include <bits/stdc++.h>using namespace std;const int N = 50 + 10;int dp[N][13][3];int dig[N];int dfs(int pos, int mod, int status, bool limit){ if(pos < 1) return mod == 0 && status == 2; if(! limit && dp[pos][mod][status] != -1) return dp[pos][mod][status]; int en = limit ? dig[pos] : 9; int ans = 0; for(int i = 0; i <= en; i++) { int t = status; if(t != 2) { if(i == 1) t = 1; else if(t == 1 && i == 3) t = 2; else t = 0; } ans += dfs(pos-1, (mod*10 + i) % 13, t, limit && i == en); } if(!limit) dp[pos][mod][status] = ans; return ans;}int work(int n){ int tot = 0; while(n) dig[++tot] = n % 10, n /= 10; memset(dp, -1, sizeof dp); return dfs(tot, 0, 0, 1);}int main(){ int n; while(~ scanf("%d", &n)) printf("%d\n", work(n)); return 0;}
阅读全文
0 0
- 【数位DP】 hdu3652 B-number
- 【hdu3652】【数位DP】B-number
- 【数位DP】B-number HDU3652
- HDU3652:B-number(数位DP)
- hdu3652 B-number (数位DP)
- HDU3652 B-number 数位DP
- hdu3652 B-number 数位dp
- [HDU3652]B-number && 数位DP
- hdu3652 B-number 数位dp
- hdu3652---B-number(数位dp)
- HDU3652 B-number 数位DP
- hdu3652 B-number 数位dp
- hdu3652 B-number 数位dp
- HDU3652 B-number(数位DP)
- 数位dp--hdu3652 B-number
- hdu3652 B-number(数位DP)
- HDU3652 B-number 数位DP
- hdu3652 B-number 数位dp
- HDU 6194 string string string 后缀数组+rmq
- js面向对象,多种创建对象方法!
- C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- 最优二叉搜索树
- Wordpress 文章特色图无法显示应如何解决
- hdu3652 B-number 数位dp
- Sqlite3数据库
- 变量的实质
- hdu 1754
- Dijkstra算法模板
- caffe-segnet的一个小例子
- Faster-Rcnn在windows下制作并训练自己的数据集
- Y
- 事务ACID的含义