문제에 대한 P1086 땅콩 따기 솔루션

이 질문은 그냥 평범한 아날로그가 아닌 욕심입니다!

초점이 문장입니다 ". 그리고 대부분의 땅콩, 땅콩 그것을 선택하는 식물의 나머지 부분을 찾을 수 있습니다"

즉, 다음 제한된 시간 동안 최적의 솔루션을 고려하는 것이 남아있는 땅콩의 대부분보다는 탐욕의 아이디어에 의해을 찾아야한다

그래서, 질문도해야한다, 이것은 단순한 시뮬레이션입니다;

아이디어는 매우 간단하다 : 가치있는 땅콩 식물 각을 절약 할 수있는 구조로, 땅콩 0이없는 튜브의 나머지 접합,

덧셈 이상으로되어 있으며, 최대로 축적 한 후, 정렬 내림차순 값으로 CMP 함수를 정의하거나 완료 될 때까지 모든 식물의 결과가 추가 제한하고 그것에 응답 ANS는 출력;

다음과 같이 AC 코드는 다음과 같습니다

#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병;
INT의 M, N, K, 값, NUM = 0 , ANS = 0 , TIME1 = 0 ;
구조체 zBX에 {
     INT의 X, Y, 땅콩; 
} HS [ 401 ];
부울 CMP (zBX에 A, B를 zBX에) 
{ 
    복귀 a.peanut> b.peanut; 
} 
INT 의 main () { 
    는 scanf ( " % D % D % D " , m, N, K);
    위한 ( int로 = 1을 1 ; I <= m; I ++ )
          ( INT J = 1; J <= N-, J ++ ) 
        { 
            는 scanf ( " %의 D " , 값)
             IF (값! = 0 ) 
            {
                 ++ NUM; 
                HS [NUM] .peanut = 값; 
                HS [NUM] .x를 = J; HS [NUM] .Y = I; 
            } 
        } 
    정렬 (HS + . 1 , NUM + + HS 1. , CMP)를,
      ( INT I = . 1 I가 ++; I <= NUM ) 
    { 
        IF (I == 1. ) // 제 특별 판사를 필요
        { 
            TIME1 [+ = HS . 1 ] .Y의 + 1. ,
             IF (TIME1 + HS [ 1. .Y>] K) 
            { 
                의 printf ( " 0 " ); 반환  0 ; 
            } 
            다른 된 ANS = HS + [ 1. .peanut] 
        } 
        다른 / / 다른 일반적인 조건 
        { 
            TIME1 + = ABS (HS [I] .x를-HS [I- 1. ] .x를) + ABS (HS [I] .Y-HS [I- 1. ] .Y) + 1이다. ;
             IF (TIME1 HS + [I] .Y> K) 
            { 
                의 printf ( " %의 D " , ANS)는, 반환  0 ] //이 시간 경과하면 계속 축적하지 않는 프로그램의 출력 단부 응답 직접 
            }
             다른  
            { 
                ANS + = HS [I] .peanut; 
            } 
        }     
    } 
    에서 printf ( " D의 % " , ANS)
     복귀  0 ; 
}

完结 ✿✿ □ (° ▽ °) 노 ✿

 

추천

출처www.cnblogs.com/lbssxz/p/10964299.html