HDU 3555 Bomb 基础数位dp
2013-10-13 13:39
453 查看
题意大致就是说给你一个数n,要你求0~n之间含有49的数的个数
理解题意很简单下面就直接贴代码了
理解题意很简单下面就直接贴代码了
#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; __int64 dp[21][4]; int a[1000]; void init() { memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int i=1;i<=20;i++) { dp[i][0]=dp[i-1][0]*10-dp[i-1][1]; //不含49的个数 dp[i][1]=dp[i-1][0]; //不含49但是最高位为9 dp[i][2]=dp[i-1][1]+dp[i-1][2]*10; //含有49的个数 } } int main() { int n,len; init(); scanf("%d",&n); while(n--) { len=0; __int64 m,ans=0,flag=0; scanf("%I64d",&m); m++; memset(a,0,sizeof(a)); while(m) { a[++len]=m%10; m/=10; } int g=0; for(int i=len;i>=1;i--) { ans+=a[i]*dp[i-1][2]; //对于每位先加上含有49的 if(flag) { ans+=a[i]*dp[i-1][0]; //如果之前就已经构成了49,那么加上不能构成49的 } if(!flag && a[i]>4) //加上最高位为9的,添加一个4进去 ans+=dp[i-1][1]; if(g==4 && a[i]==9) flag=1; g=a[i]; } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- HDU 3555 Bomb(基础数位dp)
- HDU 3555 Bomb(数位DP)
- 几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
- HDU3555——Bomb(数位DP)
- hdu 3555 Bomb(数位DP)
- 【数位DP】 HDU 3555 Bomb
- 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
- 数位DP——Bomb ( HDU 3555 )
- HDU3555——Bomb(数位dp入门)
- hdu 3555 Bomb(数位DP)