poj1505 (바이너리 욕심 +)

"가능한 한 작은 최대"매우 일반적인 최적화 목표입니다.

책에 관한 튀김.

이 주제를보고 :

http://poj.org/problem?id=1505

다음과 같이 코드의 내 사본은 다음과 같습니다

사용법 #include <iostream> 
#INCLUDE <cstdio> 
#INCLUDE <CString을> 
사용 스페이스 성병; 
INT 책 [505]; 
부울 플래그 [505]; 
INT의 m, K; // m : 책의 수 K : 스크 라이버의 수. 
INT의 CNT; // CNT 카운트의 약자입니다. 
INT 사본 (긴 길이 X) 
{ 
    CNT = 1; 
    긴 긴 합 = 0; 
    memset 함수 (플래그는 false를 sizeof (플래그)); 
    
    대해 (ⅰ =에게의 m-1에서 INT; I> = 0; 난 ...) 
    { 
        합계 = + 책 [I]; 
        SUM (> X)의 경우 
        { 
            CNT ++; 
            합 = 책 [I]; 
            플래그 [I]는 = 참; 
        } 
 
    } 
    CNT를 반환; 
} 

무효 인쇄 () 
{
    의 printf ( "%의 D"책 [0]); 
    경우 (; 나는 m <I는 I = 1 ++ INT) 
    { 
        경우 (플래그 [I-1])의 printf ( "/")하는 단계; 
        의 printf ( "%의 D"책 [I]); 
    } 
    의 printf ( "\ n")를; 
} 

INT의 main () 
{ 
        INT의 T; 
        scanf와 ( "%의 D ', T); 
        긴 길이 (L), (R); 
        (T--) 동안 
        { 
            는 scanf ( "%의 D % d에", m, k)를; 
            L = R = 0; 
            경우 (; 나는 m <I는 I = 0 ++ INT) 
            { 
                는 scanf ( "%의 D", 책 [I]); 
				(도서 [I]> l)의 경우 L = 책 [I]; 
                R + = 책 [I]; 
            } 
            
            오래 오래 중반을;
                중간 = (L +에서의 R) / 2; 
                (복사 (MID) <= K)는 R = 미드 경우; 
                다른 중간 L = + 1; 
            } 
            INT의 CNT = 복사 (R); 
            경우 (; && 내가 해요 <CNT를 <K, I = 0 int로 난 ++) 
            { 
                만약 플래그 [I] = TRUE, CNT ++ (플래그 [I]!); 
            } 
          인쇄 (); 
        } 
    0을 반환; 
}

  

추천

출처www.cnblogs.com/dragondragon/p/11373604.html