[HDU4734]하지 62 (DP 엔트리 비트 수)

> 포털 <

문제의 의미 통계 간격 [A는 B] 번호 4, 62 얼마나 포함하지 않는다.

아이디어 : 디지털 DP

그냥 국가가 법적 보장 할 수 있습니다 (4)을 열거하지 않습니다, 다음 무엇을 결정하는 열거시, 디지털 4 연속 (62)이 없을 수있는 4가 없기 때문에이 제약의 필요하지 않습니다 기억, 그리고 62, 다음, 포함 할 수 없습니다 2 개에, 현재의 I은 이러한 두 가지 상황이 동일하지 카운트 때문에 다른 방식의 수를 기록하는 상태를 사용하여 6 6 아니다.
DP는 [POS는 [STA] 현재 제 나타내는 포스 는 전인지, 위치를 6 주, STA 두 상태 0과 1이 가고,도 6은 동일 종으로 간주 할 수있는 경우가 아니라, 영향이 없습니다 계산합니다.


암호

#INCLUDE <cstdio> 
#INCLUDE <CString을> 
#INCLUDE <알고리즘>
 사용  스페이스 성병; 

int로 A [ 20 ];
INT의 DP [ 20 ] [ 2 ]; 

INT DFS ( INT POS, INT의 전, INT의 STA, INT의 제한) {
     경우 (POS == 0 )  1 ;
    만약 - (제한 && DP [POS] [STA =! 1 ) 복귀 DP [POS] [STA];
    int로 ? = 한계를 A [POS] : 9 ;
    INT의 TMP = 0 ;
    위한 ( int로 I = 0 ; I는 <= 최대; 내가 ++ ) {
         경우 (프리 == 6 && I == 2 ) 계속 ;
        경우 (I == 4 ) 계속 ; 
        TMP가 + = DFS (pos- 1 난 내가 == 6 , 제한 && 난 == A [POS를]); 
    } 
    만약 DP [POS] [STA] = (최대!) TMP;
    반환 의 tmp를; 
} 
int로 해결 ( INT X) {
     INT의 POS = 1;
    반면 (X) { 
        A [POS ++] = X % 10 ; 
        X / = 10 ; 
    } 
    리턴 DFS (pos- 1 - 1 , 0 , 1 ); 
} 

INT 의 main () 
{ 
    INT의 L, R; 
    memset 함수 (DP, - 1 , 를 sizeof (DP));
    동안 (~는 scanf ( " % d 개 %의 D ' , L, R) && L + R) 
        의 printf ( " % D \ 없음 " 해결 (R) -solve (1- (1)));
    반환  0 ; 
}
코드보기

 

추천

출처www.cnblogs.com/wizarderror/p/11348918.html