2013-04-03 64 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'的某个大值。我会完全避免它们。 –

回答