【数位DP】 hdu3555 Bomb
来源:互联网 发布:现货交易系统源码 编辑:程序博客网 时间:2024/05/01 23:44
Bomb
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3555
题意:给你一个数字N(1 <= N <= 2^63-1),问在1~N这些数字中,“49”这个序列出现多少次。
题解:数位DP。其实就是以一位数为单位的DP,有点类似AC自动机里的字典树。
我们可以根据字典树把情况分为3种,序列中出现“49”,序列中没有“49”但是最后一位是“4”,序列中没有“49”且最后一位不为“4”。
在这3种状态中进行转移即可。
dp[k][0] = dp[k - 1][1] * 8 + dp[k - 1][0] * 9; 0 不含49且以非4的数字结尾
dp[k][1] = dp[k - 1][0] + dp[k - 1][1]; 1 不含49且以4这个数字结尾
dp[k][2] = dp[k - 1][2] * 10 + dp[k - 1][1]; 2 含49的状态
代码:
#include<cstdio>#include<cstring>using namespace std;#define LL long longchar s[25];LL dp[25][3][2];/*dp[k][0] = dp[k - 1][1] * 8 + dp[k - 1][0] * 9;dp[k][1] = dp[k - 1][0] + dp[k - 1][1];dp[k][2] = dp[k - 1][2] * 10 + dp[k - 1][1];0 不含49且以非4的数字结尾1 不含49且以4这个数字结尾2 含49的状态*/int next(int a,int b){ if(a==2||(a==1&&b==9)) return 2; else return b==4;}int main(){ int t; scanf("%d",&t); for(; t--;) { scanf("%s",s+1); memset(dp,0,sizeof(dp)); int len=strlen(s+1); dp[0][0][1]=1; for(int i=1; i<=len; ++i) { dp[i][0][0] = dp[i-1][0][0]*9 + dp[i-1][1][0]*8; dp[i][1][0] = dp[i-1][0][0] + dp[i-1][1][0]; dp[i][2][0] = dp[i-1][2][0] * 10 + dp[i-1][1][0]; for(int j=0; j<s[i]-'0'; ++j) { dp[i][next(0,j)][0]+=dp[i-1][0][1]; dp[i][next(1,j)][0]+=dp[i-1][1][1]; dp[i][next(2,j)][0]+=dp[i-1][2][1]; } dp[i][next(0,s[i]-'0')][1]+=dp[i-1][0][1]; dp[i][next(1,s[i]-'0')][1]+=dp[i-1][1][1]; dp[i][next(2,s[i]-'0')][1]+=dp[i-1][2][1]; } printf("%I64d\n",dp[len][2][0]+dp[len][2][1]); }}
来源:http://blog.csdn.net/ACM_Ted
- 【数位DP】 hdu3555 Bomb
- 【hdu3555】【数位DP】Bomb
- 【数位DP】Bomb HDU3555
- hdu3555 Bomb 数位DP
- HDU3555:Bomb(数位DP)
- hdu3555 Bomb (数位DP)
- HDU3555 Bomb 数位DP
- Hdu3555 - Bomb - 数位dp
- hdu3555 Bomb 数位dp
- hdu3555 Bomb(数位DP)
- HDU3555 Bomb 数位DP
- HDU3555 Bomb 数位DP
- HDU3555 Bomb(数位DP)
- hdu3555 Bomb(数位dp)
- 【数位DP】HDU3555-Bomb
- hdu3555 Bomb --数位dp
- HDU3555 Bomb[数位DP]
- hdu3555 Bomb(数位DP)
- 如何清晰地思考
- 我的java笔记(IO)
- 让gcc和gdb支持intel格式的汇编
- 扫描线的简单实现
- listview拖动时背景变黑
- 【数位DP】 hdu3555 Bomb
- 做卓越的程序员_笔记1
- iphone下json的解析 NSJSONSerialization
- Java中抽象类和接口的区别
- software versioning
- android TAb分页菜单实现总结
- 秋天的回忆
- 在做android发现""和null竟然不一样。。靠。。 记住啊啊啊啊
- 一个创业游戏:商业模式