HDU 3555 Bomb(数位DP)
来源:互联网 发布:电脑无法上淘宝 编辑:程序博客网 时间:2024/06/06 17:18
题意:
寻找0 到 n 中含有49的数字的个数
#include <iostream>#include <cstdlib>#include <cstdio>#include <cmath>#include <vector>#include <cstring>#include <queue>#include <stack>#include <queue>using namespace std;const int MAXN = 50 + 10;long long dp[MAXN][3];// dp[i][0] 长度为i,不含49// dp[i][1] 长度为i,不含49但首位为9// dp[i][2] 长度为i,含有49void init(){ dp[0][0] = 1; dp[0][1] = dp[0][2] = 0; for(int i=1;i<=MAXN;i++) { dp[i][0] = dp[i-1][0] * 10 - dp[i-1][1]; dp[i][1] = dp[i-1][0]; dp[i][2] = dp[i-1][2] * 10 + dp[i-1][1]; }}int bit[MAXN];long long solve(long long n){ int len = 0; memset(bit, 0, sizeof(bit)); while(n) { bit[++len] = n % 10; n /= 10; } long long ans = 0; int flag = 0; for(int i=len;i>=1;i--) { ans += dp[i-1][2] * bit[i]; if(flag) ans += dp[i-1][0] * bit[i]; else { if(bit[i] > 4) ans += dp[i-1][1]; } if(bit[i+1] == 4 && bit[i] == 9) flag = 1; } if(flag) ans++; return ans;}int main(){ long long n; int T; init(); scanf("%d", &T); while(T--) { scanf("%I64d", &n); printf("%I64d\n", solve(n)); } return 0;}
0 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)
- 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初学)
- ios中UINavigation和UITabBar的结合
- str_to_ip ,ip_to_str
- 100个iOS开发/设计面试题汇总,你将如何作答?
- 仿360卫视桌面悬浮窗效果
- java类加载机制的一些自我总结
- HDU 3555 Bomb(数位DP)
- 程序逻辑-3(分支和循环)
- 单链表逆转
- Redis 3.0 Cluster Configuration
- codeforces535D:Tavas and Nafas
- 软考备战中
- NSDate,延展,类目
- springmvc整合shiro
- 恶意代码分析实战(7-01实验学习笔记)