디지털 기술은 DP

이상한 것은

! 긍정과 부정은 DP 수 :
우리가 같은 방식으로, 내림차순 정상적인 디지털 DP는 주어진 수보다 작은 수 있도록 ->

ll n;
int num[N],l;
ll dp[];
ll dfs(int p,int lim){
    if(p==0) return 1;
    if(!lim&&~dp[]) return dp[];
    int Uplim=lim?num[p]:9;
    ll res=0;
    for(int i=0;i<=Uplim;i++) {
        res+=dfs(p-1,lim&&(i==Uplim));
    }
    if(!lim) dp[]=res;
    return res;
}

int main(){
    scanf("%lld",&n);
    while(n) num[++l]=n%10,n/=10;
    printf("%lld\n",dfs(l,1));
}

그러나, 로우에서 하이로는 다음과 같이해야합니다 :

ll n;
int num[N],l;
ll dp[];
ll dfs(int p,int fl){
    if(p==l+1) return fl;
    if(~dp[]) return dp[];
    ll res=0;
    for(int i=0;i<10;i++) {
        res+=dfs(p+1,i<num[p]||(i==num[p]&&fl));
    }
    return dp[]=res;
}

int main(){
    scanf("%lld",&n);
    while(n) num[++l]=n%10,n/=10;
    printf("%lld\n",dfs(1,1));
}

특별한 경우에 이것은 후유증 번거로운 단계 중 일부를 제거 할 수 있습니다

추천

출처www.cnblogs.com/chasedeath/p/11269342.html