# Problem

By
blackntt

Link: https://www.hackerrank.com/challenges/construct-the-array/problem

# Solution

Giaỉ pháp với dynamic programming:
– Giải pháp này bị hạn chế về space complexity O(k*n)

 long v[k+1][n];
    for (int i=1; i<=k; i++) {
        v[i][0] = 0l;
        v[i][1] = 1l ;
    }
    v[x][0]= 1l;
    v[x][1]= 0l;
    for(int stage=2;stage<n;stage++){
        for (int i=1; i<=k; i++) {
            long vmax = 0l;
            for (int j=1;j<=k;j++){
                if (i!=j ){
                    vmax = (vmax+(v[j][stage-1]));
                }
            }
            v[i][stage]= vmax%1000000007;
        }
    }
    return v[1][n-1];
  • Giải pháp 2: giải quyết về vấn đề space complexity O(n):
long v[3][n];
    for (int i=1; i<=2; i++) {
        v[i][0] = 0;
        v[i][1] = 1 ;
    }
    v[2][0]= 1;
    v[2][1]= 0;
    int stage = 0;
    for( stage=2;stage<n;stage++){
        v[1][stage]=((k-2)*v[1][stage-1]+v[2][stage-1])%1000000007;
        v[2][stage]=((k-1)*v[1][stage-1])%1000000007;
    }

    return x==1?v[2][n-1]:v[1][n-1];