hdu3555 Bomb 数位DP入门
2013-09-19 19:49
447 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555
简单的数位DP入门题目
思路和hdu2089基本一样
直接贴代码了,代码里有详细的注释
代码:
简单的数位DP入门题目
思路和hdu2089基本一样
直接贴代码了,代码里有详细的注释
代码:
#include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> using namespace std; long long int dp[30][3]; void init() { dp[0][0]=1;dp[0][1]=0;dp[0][2]=0; for(int i=1;i<30;i++) { dp[i][0]=dp[i-1][0]*10-dp[i-1][1];//dp[i][0]表示长度为i的不含49的数的个数 dp[i][1]=dp[i-1][0];//dp[i][1]表示长度为i的不含49且最高位为9的数的个数 dp[i][2]=dp[i-1][2]*10+dp[i-1][1];// dp[i][2]表示长度为i的含49 的数的个数 } } int bit[30]; long long int solve(long long int n) { int len=1; while(n) { bit[len++]=n%10; n/=10; } bit[len]=0; long long int ans=0; bool 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];//如果高位已经出现49那么后面随意 if(flag==0 && 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() { int t; long long int n; scanf("%d",&t); init(); while(t--) { scanf("%I64d",&n); cout<<solve(n)<<endl; } return 0; }
相关文章推荐
- 【数位DP入门】HDU3555 Bomb
- hdu3555 Bomb ——数位DP入门题
- HDU3555:Bomb(数位dp入门)
- hdu3555 Bomb ——数位DP入门题
- hdu3555 Bomb ——数位DP入门题
- hdu3555 + 2089 (数位dp入门)
- HDU 3555 Bomb + HDU 2089 不要62 数位dp入门题目
- HDU 3555 Bomb 数位DP 入门
- HDU-3555 Bomb (数位dp 入门题)
- hdu3555 Bomb --数位dp
- hdu---(3555)Bomb(数位dp(入门))
- HDU3555 Bomb —— 数位DP
- hdu3555 Bomb(数位dp)
- [暑假集训--数位dp]hdu3555 Bomb
- HDU3555 Bomb(数位dp)
- HDU3555——Bomb(数位dp入门)
- HDU3555:Bomb(数位DP)
- hdu3555 Bomb 水数位dp
- hdu3555 Bomb (数位DP)
- Hdu3555 - Bomb - 数位dp