POLY
2014-08-02 14:20:25

/**

* POLY

*/

#include <stdio.h>

#define N 92

#define MAX_N 100

//인덱스 처리가 1~100 까지 되므로 101 로 해줌

int cache[MAX_N+1][MAX_N+1];

const int mod = 10*1000*1000;

//n개의 정사각형이 있고 첫 줄을 first 로

//고정하면 몇개의 polynomio 가 만들어 지는가?

//값이 커서 나머지를 구하는 경우 부분 나머지를 먼저 구해도 상관없음

//굳이 크기를 비교하지 않아도 지장 없음.

//단, 특정 수 초과시 나머지를 구한다면 크기비교 필요.

int poly(int n, int first){

    //기저사례

    if(n==first){

        return 1;

    }

    //메모이제이션

    int &ret = cache[n][first];

    if(ret!=-1) {

        return ret;

    }

    //hypothesis = poly(n-i,i)

    //다음번 n은 반드시 n-first 이다.

    //poly(n-first, 1) ~ poly(n-first, n-first);

    ret =0;

    for(int second=1;second<=n-first;second++){

        int add = first+second -1;

        add *= poly(n-first,second);

        add %= mod;

        ret += add;

        ret %= mod;

    }

    

    return ret;

}

int main(){

    //cache initialization

    int i=0,j=0,n=0;

    for(i=0;i<=MAX_N;i++){

        for(j=0;j<=MAX_N;j++){

            cache[i][j]=-1;

        }

    }

    

    for(i=1;i<=N;i++){

        n+=poly(N,i);

        n%=mod;

    }

    printf("%d

",n);

}

▼ more
장고 끝에 악수
2014-07-30 21:15:38

제목의 뜻은 익히 알고 있으나,

장고 끝에 과거에 악수를 두었던 것이 떠올라서인지..

와닿는 문구다.

하지만 무엇이던지 간에

후회해도 그 건에 대해서 때는 이미 늦은 후다.

▼ more
7월 결산
2014-07-25 20:13:52

DP : TSP

String Search : KMP

▼ more
아직 볼게 많다.
2014-07-25 01:30:54

기본적으로

boolean 값으로 명시적으로 나타내는 것까지 함수가 처리하도록 하는 것은 함수를

복잡하게 할 수 있으니 지양할 것.

단순하게 int 값을 돌려주더라도 받은 쪽에서 해당 값으로 처리 할 수 있도록 하는

것이 깔끔한 경우도 더러 있다.

DB 를 하려면..

0. 내가 지금까지 본 것, 보지 않은 것을 한 서로 한쪽으로

  몰 수 있도록 해야함.

1. 점화식 형태 알고리즘 정리.

2. Recursive 로 완전 탐색 방법을 쓸 경우 아래 방법 필요.

  1) 기저 사례

  2) Memoization 체크

  3) 점화식.

  (memoization 이 통한다는 것 자체가 이전 결과가 이후 결과를

  만드는데 쓰인 다는 것이며, 중복계산이 많이 발생할 수 있다는 것 임.)

3. Reconstruct 할 경우 다시 Recursive 에 들어갈 수 있으나

  모두 memoization 이 되어 있을 것이므로 빠르게 가능할 듯?

▼ more