После полудня все, так что я работаю над проблемой резки стержня. Кто-нибудь знает, почему этот код работает, когда n жестко запрограммирован на 7 или какое-то другое число в main, но когда я перехватываю n через std: cin, он не работает и выдает неправильный вывод ... Что здесь происходит?
Вот результат установки в главном int n = 7
18
1 6 -1
При использовании стандартного ввода для получения n = 7 я получаю это:
35
1 1 1 1 1 1 1 -1
Прайс-лист одинаков в обоих случаях ....
1
5
8
9
10
17
17
#include <iostream>
#include <cstring>
using namespace std;
const int A = 1000;
int p[A];
int r[A], s[A];
void init() {
p[0] = 0;
p[1] = 1;
p[2] = 5;
p[3] = 8;
p[4] = 9;
p[5] = 10;
p[6] = 17;
p[7] = 17;
p[8] = 20;
p[9] = 24;
p[10] = 30;
}
int extendedButtomUpCutRod(int n) {
for (int j = 1; j <= n; ++j) {
int q = -2145631872;
for (int i = 1; i <= j; ++i)
if (q < p[i] + r[j - i]) {
q = p[i] + r[j - i];
s[j] = i;
}
r[j] = q;
}
return r[n];
}
// prins the extended method's output
void printCutRodSoln(int n) {
do
cout << s[n] << " ";
while ((n -= s[n]) > 0);
}
int main(){
init();
r[0] = 0;
//int n = 7; //works when this is used.
int n;
std::cin >> n; //doesnt work when this is used?
for(int i = 0; i <= n; i++){
std::cin >> p[i];
}
cout << extendedButtomUpCutRod(n) << endl;
printCutRodSoln(n);
std::cout << "-1"<< std::endl;
}