HDU 3555 Bomb 简单数位DP
2014-04-10 15:51
267 查看
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3555
题目大意:给出一个数N,在[1, N]中找出有多少个数字含有连续的“49”,是一道简单的数位DP, 可以拿来做模板……
题目大意:给出一个数N,在[1, N]中找出有多少个数字含有连续的“49”,是一道简单的数位DP, 可以拿来做模板……
#include <iostream> #include <cstdio> #include <cstring> using namespace std; typedef __int64 LL; LL digits[30]; LL dp[30][10][2]; // len表示当前在第几位,pre表示前一位数字是多少,flag表示是否含有49, // limit表示当前位的数字是否有限制, [0,9] OR [0,digits[len]]; LL dfs(int len, int pre, int flag, int limit) { if(len == 0) return flag == 1; if(!limit && dp[len][pre][flag] != -1) return dp[len][pre][flag]; int end = limit ? digits[len] : 9; LL sum = 0; for(int i = 0; i <= end; ++i) { sum += dfs(len-1, i, (flag || (pre==4 && i==9)), (limit && end==i)); } return limit ? sum : dp[len][pre][flag] = sum; } LL cal(LL n) { int len = 0; while(n) { digits[++len] = n % 10; n /= 10; } return dfs(len, -1, 0, 1); } int main() { int t; memset(dp, -1, sizeof(dp)); LL n; scanf("%d\n", &t); while(t--) { scanf("%I64d", &n); printf("%I64d\n", cal(n)); } return 0; }
相关文章推荐
- HDU 3555 Bomb (简单数位DP)
- HDU 3555 Bomb 简单数位DP
- hdu 3555 Bomb【数位dp~吖!!!!!】
- HDU 3555 Bomb(数位DP)
- HDU-3555 Bomb 数位DP
- hdu 3555 bomb 数位dp
- HDU-3555 Bomb 数位dp
- HDU 3555 Bomb 数位dp
- hdu 3555 Bomb(数位DP,4级)
- hdu 3555 Bomb (数位DP)
- 【数位dp】HDU - 3555 Bomb
- 【数位dp】hud 2089 不要62 hdu 3555 Bomb
- HDU 3555 Bomb(数位DP)
- HDU 3555 Bomb(数位DP)
- hdu 3555 Bomb(不要49,数位DP)
- hdu 3555 Bomb ( 数位DP)
- HDU - 3555 Bomb(数位dp)
- 动态规划晋级——HDU 3555 Bomb【数位DP详解】
- HDU 3555 Bomb题解(数位dp)
- HDU 3555 Bomb (数位dp)