オンラインでいくつかの質問を解決することにより、動的プログラミングを学習しようとしています。私が遭遇した1つの質問では、次の入力を処理する必要があります
4 10 3 4 4 5 6 7 5 7
最初のポイントは項目数、2 番目は総容量、残りの 4 つ (ペア) は値と容量をポイントする必要があります。
私が抱えている問題は、それを解析するコードにあります。
#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());
}
このプログラムを実行すると、この入力に対して間違った出力が得られます
akhetarp@desktop> knapsack < test
4 3
5 4
7 6
ただし、行のコメントを外し、挿入のために前の行にコメントを付けると、期待どおりの結果が得られます
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
私はそれがいくつかの基本的なエラーでなければならないことを知っています。前もって感謝します、