2013-04-03 88 views
1

爲什麼在這段代碼中不需要動態分配?爲什麼在這裏不需要動態分配

int knapSack(int W, int wt[], int val[], int n) 

{ 
    int i, w; 
    int K[n+1][W+1]; 

    // Build table K[][] in bottom up manner 
    for (i = 0; i <= n; i++) 
    { 
     for (w = 0; w <= W; w++) 
     { 
      if (i==0 || w==0) 
       K[i][w] = 0; 
      else if (wt[i-1] <= w) 
       K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]); 
      else 
       K[i][w] = K[i-1][w]; 
     } 
    } 

    return K[n][W]; 
} 

總感覺不能用可變如K[n+1][W+1];

+0

這是一個VLA其中C99添加了支持。 – FatalError

+0

這是一個[可變長度數組](https://en.wikipedia.org/wiki/Variable-length_array),一個C99加法。 – Praetorian

+0

...然後祈禱沒有人通過'W'或'n'的某個大值。我會完全避免它們。 –

回答