HDU-3555-Bomb(数位DP)
2016-08-04 15:31
369 查看
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555
题意:求1-n中含有49数字的个数;
题解:数位DP
CODE:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
long long dp[25][5];
int a[20];
/// dp[i][0] i 不含49
/// dp[i][1] i 含有49
/// dp[i][2] 高位9不含49
long long solve(long long x)
{
long long poi=x;
int len=0;
while(poi)
{
a[++len]=poi%10;
poi/=10;
}
long long ans=0, flag=0;
for(int i=len; i>0; --i)
{
ans+=1LL*dp[i-1][1]*a[i];
if(flag){ans+=1LL*dp[i-1][0]*a[i];continue;}
if(a[i]>4)ans+=dp[i-1][2];
if(i<len && a[i]==9 && a[i+1]==4)flag=1;
}
return ans+flag;
}
int main()
{
int T;
dp[0][0]=1;
for(int i=1; i<20; ++i)
{
dp[i][0]=dp[i-1][0]*10-dp[i-1][2];
dp[i][1]=dp[i-1][2]+dp[i-1][1]*10;
dp[i][2]=dp[i-1][0];
}
cin>>T;
while(T--)
{
long long n;
scanf("%I64d",&n);
cout<<solve(n)<<endl;
}
return 0;
}
/*
10
1000000000000000000
100000
19312489
12481794
3970
1142933
708132
*/
题意:求1-n中含有49数字的个数;
题解:数位DP
CODE:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
long long dp[25][5];
int a[20];
/// dp[i][0] i 不含49
/// dp[i][1] i 含有49
/// dp[i][2] 高位9不含49
long long solve(long long x)
{
long long poi=x;
int len=0;
while(poi)
{
a[++len]=poi%10;
poi/=10;
}
long long ans=0, flag=0;
for(int i=len; i>0; --i)
{
ans+=1LL*dp[i-1][1]*a[i];
if(flag){ans+=1LL*dp[i-1][0]*a[i];continue;}
if(a[i]>4)ans+=dp[i-1][2];
if(i<len && a[i]==9 && a[i+1]==4)flag=1;
}
return ans+flag;
}
int main()
{
int T;
dp[0][0]=1;
for(int i=1; i<20; ++i)
{
dp[i][0]=dp[i-1][0]*10-dp[i-1][2];
dp[i][1]=dp[i-1][2]+dp[i-1][1]*10;
dp[i][2]=dp[i-1][0];
}
cin>>T;
while(T--)
{
long long n;
scanf("%I64d",&n);
cout<<solve(n)<<endl;
}
return 0;
}
/*
10
1000000000000000000
100000
19312489
12481794
3970
1142933
708132
*/
相关文章推荐
- HDU 3555 Bomb (数位DP)
- hdu 3555 - Bomb [数位dp]
- hdu 3555 Bomb(数位DP)
- hdu 3555 Bomb(数位DP,4级)
- 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
- 动态规划晋级——HDU 3555 Bomb【数位DP详解】
- HDU-3555 Bomb 数位DP
- hdu 3555 Bomb 数位DP
- hdu 3555 Bomb (数位DP)