ural1057 Amount of degrees
2011-08-25 11:19
253 查看
Create a code to determine the amount of integers, lying in the set [X;Y] and being a sum of exactly
K different integer degrees of B.
Example. Let X=15, Y=20,
K=2, B=2. By this example 3 numbers are the sum of exactly two integer degrees of number 2:
17 = 24+20,
18 = 24+21,
20 = 24+22.
Y, separated with a space (1 ≤ X ≤ Y ≤ 231−1). The next two lines contain integers
K and B (1 ≤ K ≤ 20;2 ≤ B ≤ 10).
X and Y, being a sum of exactly K different integer degrees of
B.
Problem Source: Rybinsk State Avia Academy
简单的DFS,记忆化搜索。
直接上代码:
K different integer degrees of B.
Example. Let X=15, Y=20,
K=2, B=2. By this example 3 numbers are the sum of exactly two integer degrees of number 2:
17 = 24+20,
18 = 24+21,
20 = 24+22.
Input
The first line of input contains integers X andY, separated with a space (1 ≤ X ≤ Y ≤ 231−1). The next two lines contain integers
K and B (1 ≤ K ≤ 20;2 ≤ B ≤ 10).
Output
Output should contain a single integer — the amount of integers, lying betweenX and Y, being a sum of exactly K different integer degrees of
B.
Sample
input | output |
---|---|
15 20 2 2 | 3 |
简单的DFS,记忆化搜索。
直接上代码:
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int digit[20]; int k; long long dp[40][20][25]; long long DFS(int pos,int num,int b,bool inf) { int i,j; if (pos==-1) return (num==k); if (num>k) return 0; if (!inf && dp[pos][num][b]!=-1) return dp[pos][num][b]; int end=inf ? min(1,digit[pos]) : 1; long long ans=0; for (i=0;i<=end;i++) { if (i==0) ans+=DFS(pos-1,num,b,inf && (i==digit[pos])); else ans+=DFS(pos-1,num+1,b,inf && (i==digit[pos])); } if (!inf) { dp[pos][num][b]=ans; } return ans; } long long Calc(int t,int b) { int pos=0; while(t) { digit[pos++]=t%b; t/=b; } return DFS(pos-1,0,b,1); } int main() { int i,j,n,b; int x,y; memset(dp,-1,sizeof(dp)); scanf("%d%d%d%d",&x,&y,&k,&b); printf("%lld\n",Calc(y,b)-Calc(x-1,b)); return 0; }
相关文章推荐
- Amount of Degrees[ural 1057]
- Ural 1057(Amount of Degrees-数位统计入门)
- Amount of Degrees URAL - 1057 数位dp
- ural1057 Amount of Degrees数位统计入门题
- [ural1057]Amount of Degrees && 数位DP
- URAL 1057 Amount of Degrees (数位dp)
- [ural1057][Amount of Degrees] (数位dp+进制模型)
- 【Ural】【1057】Amount of degrees
- ural1057 Amount of Degrees ——数位DP
- ural 1057 - Amount of Degrees(数位统计)
- ural1057 Amount of Degrees
- [ACM] ural 1057 Amount of degrees (数位统计)
- URAL 1057 Amount of Degrees(数位DP)
- 【数位DP】URAL 1057 Amount of Degrees
- URAL 1057 Amount of Degrees 数位DP *
- URAL 1057 Amount of Degrees 数位dp
- ural 1057 Amount of Degrees(数位dp)
- URAL - 1057 Amount of Degrees
- URAL 1057 Amount of Degrees(数位统计)
- 数位DP-URAL-1057-Amount of Degrees