HDU-3555 Bomb 数位DP
来源:互联网 发布:百视通网络电视怎么用 编辑:程序博客网 时间:2024/05/16 12:36
题目链接
#include <cstdlib>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 25;typedef unsigned __int64 Int64;Int64 N, dp[maxn][3];int digit[maxn];/*dp[len][0] 表示前len位没有49的数字的个数dp[len][1] 表示前len位没有49但是以9结尾的数的个数dp[len][2] 表示前len位有49的状态 */void init(){ dp[0][0] = 1; for (int i = 1; i <= 20; ++i) { dp[i][0] = 10 * dp[i-1][0] - dp[i-1][1]; dp[i][1] = dp[i-1][0]; dp[i][2] = 10 * dp[i-1][2] + dp[i-1][1]; }}int main(){#ifndef ONLINE_JUDGE freopen("data.txt","r",stdin);#endif init(); int cas, len, flag; Int64 ret; scanf("%d", &cas); while( cas -- ){ flag = ret = 0; scanf("%I64u", &N); ++ N; memset(digit, 0, sizeof (digit)); for( len = 1; N; len ++ ){ digit[len] = N % 10; N /= 10; } for (int i = len-1; i >= 1; --i) { ret += digit[i] * dp[i-1][2]; // 已经有49就直接加上 if ( flag ) { ret += digit[i] * dp[i-1][0]; } else if ( !flag && digit[i] > 4 ) { ret += dp[i-1][1]; } if (digit[i+1] == 4 && digit[i] == 9) { flag = 1; } } printf("%I64u\n", ret); } return 0; }
#include<stdio.h>#include<iostream>#include<string>#include<string.h>#include<math.h>#include<functional>#include<algorithm>#include<vector>#include<queue>using namespace std;const int maxn = 20; typedef __int64 Int64;Int64 n;Int64 dp[maxn][3];int digit[maxn];Int64 dfs( int pos,int st,bool flag ){if( !pos ) return st == 2;if( flag && dp[pos][st] != -1 )return dp[pos][st];Int64 ans = 0;int u = flag?9:digit[pos];for( int i = 0; i <= u; i ++ ){if( st == 2 || ( st == 1 && i == 9 ) )ans += dfs( pos-1,2,flag||i<u );else if( i == 4 ) ans += dfs( pos-1,1,flag||i<u );else ans += dfs( pos-1,0,flag||i<u );}if( flag )dp[pos][st] = ans;return ans;}Int64 fun( Int64 x ){int len = 0;while( x ){digit[++len] = x%10;x /= 10;}return dfs( len,0,0 );}int main() {#ifndef ONLINE_JUDGE freopen("data.txt","r",stdin);#endifint cas;scanf("%d",&cas);memset( dp,-1,sizeof(dp) );while( cas -- ){scanf("%I64d",&n);printf("%I64u\n",fun(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)
- 【数位DP】【HDU 3555】Bomb
- hdu 3555 Bomb(数位DP)
- HDU 3555 Bomb(数位dp)
- 数位dp HDU 3555 Bomb
- HDU-3555 Bomb 数位DP
- HDU 3555 Bomb(数位DP)
- VC++无标题窗口以及控件拖动的方法(修正)
- 社区商业的规划
- Keep Your Direction
- [lazarus] 分享一个BMP图像平滑缩放的代码
- Windows下搭建PHP开发环境
- HDU-3555 Bomb 数位DP
- 【NYOJ 127 】
- 点击按钮自动添加行 + 点击按钮,将行变为可输入的文本框
- 我们的管理:产品经理与程序员协作
- C#实现Image<byte>类人脸图片归一化 (图像处理)
- oracle中分组后,把一组中一列的多行值合并成一行
- libvirt tcp连接
- JAVA后台计算两个日期之间的工作日时间差
- quick cocos2dx 实例——lua基础01