La résolution de l'Entier à Dos

J'ai une nouvelle dynamique de programmation et ont essayé de l'entier à dos problème ici au SPOJ (http://www.spoj.pl/problems/KNAPSACK/) . Cependant, pour le cas de test ma solution n'est pas de donner la bonne sortie. Je serais reconnaissant si vous pouviez proposer si à la suite de la mise en œuvre par moi est correct. Veuillez noter que la variable back est de revenir en arrière, à propos de laquelle je ne suis pas sûr de la façon de faire. J'espère avoir votre aide dans la mise en œuvre de la mandature. Merci.

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>

using namespace std;

int knapsack(int value[], int weight[], int n, int C,
         vector < int >&back)
{
    int *M = new int[C + 1];
    int k;
    int i, j, tmp, pos;
    for (i = 1; i <= C; i++) {
        M[i] = M[i - 1];
        pos = i - 1;
        for (j = 0; j < n; j++) {
            k = i - weight[j];
            if (k >= 0)
                tmp = M[k] + value[j];
            if (tmp > M[i]) {
                M[i] = tmp;
            }
        }
        back.push_back(pos);
    }
    int ans = M[C];
    delete[]M;
    return ans;
}


int main()
{
    int C, N;
    cin >> C >> N;
    int* value = new int[N+1];
    int* weight = new int[N+1];
    for ( int i = 0; i <= N; i++) {
        cin>>value[i]>>weight[i];
    }
    vector < int >back(N, 0);
    cout<<knapsack(value,weight,N,C,back)<<endl;
    return 0;
}

Voici la bonne entrée/de sortie en cas de test:

Input:
4 5
1 8
2 4
3 0
2 5
2 3


Output:
13

Cependant, le résultat que j'obtiens est 17.

"Toutefois, pour le cas de test ma solution n'est pas de donner de bons résultats." L'entrée de qui? La sortie considérez-vous corriger? et quelle sortie vous avez réellement obtenir?
Non, il n'est pas.

OriginalL'auteur hytriutucx | 2012-06-14