DP 문제의 최장 비강하 하위 시퀀스

1194 단어 dp
문제 설명: 무질서한 서열 a1, a2,......am에서 가장 긴 서열을 찾아서 i<=aj...<=ak; 그리고 i문제 분석: 만약에 전 i-1개 수 중 가장 긴 비강자 서열의 마지막 수가ak라면그러면 다음 단계는 전 k-1개 수 중 가장 긴 비강자 서열을 구하는 것이다.
따라서 우리는 상태opt[j]를 설계하여 전 i개수 중 a[i]로 구성된 가장 좋은 결과를 나타낼 수 있다.
그러면 결정은 전 i-1개 수에서 가장 큰opt[j]를 찾아서 a[j]<=a[i]를 만들고opt[j]+1은opt[i]의 값이다.
방정식은 다음과 같이 나타낼 수 있습니다.
      max[opt[j]]            a[i] < a[j]   && 0<=jopt[i] = 
      max[opt[j]]+1        a[i] >= a[j] && 0<=j다음은 C 테스트 코드입니다.
#include <stdio.h>

#include <stdlib.h>



int main()

{   

    int seq[10] = {4,5,7,8,3,2,6,7,33,4};

    int opt[10], i, j, max = 0;



    for(i=0; i<10; i++)

        opt[i] = 0;

    opt[0] = 1;  //               1



    for(i=1; i<10; i++)

  {

     opt[i] = 1;

        for(j=0; j<i; j++)

        {

            if(seq[j]<=seq[i] && opt[j]+1>opt[i])

            {

                opt[i] = opt[j]+1;

            }

        }

  }



    for(i=0; i<10; i++)

        if(opt[i] > max)

            max = opt[i];

    printf("max:%d
", max); return 0; }

좋은 웹페이지 즐겨찾기