Also habe ich geübt, DP-Probleme zu lösen und habe dieses Problem herausgefunden, ich konnte nicht verstehen warum. Wenn ich meinen Vektorenvektor mit der Größe n initialisiere, funktionieren die Operationen nicht. Unterdessen, wenn ich nur Kosten als int cost [n] [n] deklariere, tut es das. Bitte erzähle mir warum.Vektor der Vektoren Initialisierung funktioniert nicht, aber eine Matrix-Array tut, warum?
int sum (vector<int> freq, int i, int j){
int s=0;
for (int x=i; x<=j; x++) {
s+=freq[x];
}
return s;
}
int optimalSearchTree(vector<int> keys, vector<int> freq){
int n = keys.size();
vector<vector<int>> cost(n,vector<int>(n,0)) ;
for (int i = 0; i < n; i++) {
cost[i][i] = keys[i];
}
for (int L=2; L<=n; L++) {
for (int i = 0; i<= n-L+1; i++) {
int j = i+L-1;
cost[i][j] = INT_MAX;
for (int r=i; r<=j; r++) {
int c = ((r > i)? cost[i][r-1]:0) +
((r < j)? cost[r+1][j]:0) +
sum(freq, i, j);
if (c < cost[i][j]) {
cost[i][j] = c;
}
}
}
}
return cost[0][n-1];
}
int main(){
vector<int> keys = {10,12,16,21};
vector<int> freq = {4,2,6,3};
cout<<optimalSearchTree(keys, freq)<<endl;
// int n = keys.size();
//vector<vector<int>> cost(n,vector<int>(n,0)) ;
//cout<<cost.size()<<" "<<cost[0].size()<<endl;
}
Was meinst du mit Operationen wird nicht funktionieren? –
Ändern Sie Ihr Programm zu [this] (http://ideone.com/oxNoRR) und Sie werden sehen, dass Sie einen Out-of-Bounds-Zugriff haben (indem Sie die 'at()' -Funktion anstelle von '[]' verwenden, um darauf zuzugreifen Elemente) .. – PaulMcKenzie