J'essaie d'apprendre la programmation dynamique en résolvant quelques questions en ligne. L'une des questions que j'ai trouvées demande de traiter l'entrée suivante
4 10 3 4 4 5 6 7 5 7
Le premier indique le nombre d'articles, le second la capacité totale et les quatre autres (par paire) devraient maintenant indiquer la valeur et la capacité.
Le problème que je rencontre est celui du code qui l'analyse.
#include<iostream>
#include<map>
#include<iterator>
using namespace std;
template<typename T>
void print(typename T::const_iterator start,
typename T::const_iterator end)
{
typename T::const_iterator itr=start;
while(itr!=end)
{
std::cout << itr->first << " " << itr->second << std::endl;
itr++;
}
}
int main()
{
int _M_N; // total numbers
int _M_V; // total values
std::map<int,int> _M_Values;
istream_iterator<int> isi(cin);
_M_N = *isi;
_M_V = *++isi;
for(int i=0;i<_M_N;i++)
{
//int m=*++isi,n=*++isi;
//_M_Values.insert(make_pair(m,n));
_M_Values.insert(make_pair(*++isi,*++isi));
}
print<std::map<int,int> >(_M_Values.begin(),_M_Values.end());
}
Lorsque j'exécute ce programme, j'obtiens une sortie erronée pour cette entrée.
akhetarp@desktop> knapsack < test
4 3
5 4
7 6
Si je décommente la ligne et commente la ligne précédente pour l'insérer, j'obtiens le résultat escompté.
int m=*++isi,n=*++isi;
_M_Values.insert(make_pair(m,n));
// _M_Values.insert(make_pair(*++isi,*++isi));
3 4
4 5
6 7
5 7
Je sais qu'il doit s'agir d'une erreur de base. Merci d'avance,