2017-12-15 6 views
0

Ich schrieb diesen Code Binomialkoeffizienten n C k zu finden:Berechnung Binomialkoeffizienten mit dynamischer Programmierung

# include <bits/stdc++.h> 
using namespace std; 
int c[20][20]; 
void initialize() 
{ 
    for(int i=0;i<20;i++) 
     for(int j=i;j<20;j++) 
      c[i][j]=-1; 
} 
int binomCoeff(int n,int k) 
{ 
    if(k==0||k==n) return 1; 
    if(c[n][k]!=-1) 
     return c[n][k]; 
    return c[n][k] = binomCoeff(n-1,k-1) + binomCoeff(n-1,k); 
} 

int main() 
{ 
    initialize(); 
    cout<<binomCoeff(4,2)<<endl; 
} 

Ich bin neu in der dynamischen Programmierung, so dass ich den Fehler nicht finden.

+0

Haben Sie eine Fehlermeldung? –

Antwort

1

Sie verwenden den zweiten Index für k (kleine oder gleich n), sondern nur größere Indizes

for(int j= 0 ;j<20;j++) 
or 
for(int j= 0 ; j <= i ;j++) 

Hinweis initialisieren, dass dieser Fehler bei dem Schritt-für-Schritt-Debugging entdeckt werden würde. Warum haben Sie diesen Ansatz ignoriert?

P.S. Methode hier ist memoization - "top-down" Art der dynamischen Programmierung. Sie können auch "bottom-up" dynamische Programmierung als Übung implementieren - Tabelle in Reihenfolge füllen und das letzte Zellenergebnis erhalten.

Verwandte Themen