Сама проблема может быть найдена здесь. Суть в том, что Бесси едет на американских горках, но у нее головокружение. Какое максимальное количество удовольствия она может иметь, не преодолевая ее "головокружительный предел". Вход состоит из:
"N K L
где N (1 ≤ N ≤ 1000) - это количество секций в данном случае на американских горках; K (1 ≤ K ≤ 500) - это сумма, при которой уровень головокружения Bessies будет снижаться, если она будет закрывать глаза на любом участке езды; и L (1 ≤ L ≤ 300 000) - это предел головокружения, который может терпеть Бесси, - если ее головокружение становится больше, чем L, Бесси заболеет, и это не весело!
Каждая из следующих N строк будет иметь два целых числа:
F D
где F (1 ≤ F ≤ 20) - это увеличение общего веса Bessies, которое получает оболочка, если она держит глаза открытыми в этом разделе, а D (1 ≤ D ≤ 500) - это увеличение ее уровня головокружения, если она держит ее глаза открытыми в этом разделе. Секции будут перечислены в порядке. "
Мой алгоритм для решения этого выглядит следующим образом:
cin >> N; // sections
cin >> K; // amount dizziness can go down
cin >> L; // dizzy ceiling
belowL = L; // sets the amount of dizzy left
for (int i = 0; i < N; i++) {
cout << "\n" << i;
cin >> F >> D; // fun increase and dizzy increase
if (D < belowL) {
if (F >= D) {
funTotal += F;
}
}
else {
belowL -= K;
}
Однако это не всегда дает правильный результат. В чем проблема? Он должен выбрать забавный вариант, если только он не поставит Бесси на порог болезни. Есть ли лучший способ сделать это?