5

Problem Statement -

Problem Statement

The task is to find the most profitable contiguous segment of tests, given a sequence of test scores, with being allowed to drop any k tests from a chosen range.

The problem appears to be a DP problem at the outset, but complexity arises when the test drop condition comes into the picture.

What modifications can be made to the classic DP approach for this problem? Or is there a completely different approach to it?

Test Range - N <= 104

Source - INOI 2011 Q Paper

asked Dec 24, 2012 at 13:40
3
  • Where did this problem appear? Commented Dec 24, 2012 at 20:44
  • Source - INOI 2011 Q Paper Commented Dec 24, 2012 at 21:55
  • In this problem K <= 100, so you can try coming up with a O(NK) algorithm Commented Jan 22, 2014 at 4:13

2 Answers 2

2

Well, here how I would do it (without getting in too much detail)

I would keep track of the value of the all the results I dropped. I would probably put them in a sorted queue whose size is the allowed number of dropped test. It would sorted such as the dropped test the nearest to zero is at the start. As I go trough the list with the traditional algorithm, I would do the following :

if I encounter a negative number
 if the queue is not full
 add it to the queue
 else
 if the new negative number is smaller (farther from zero) than the first number in the queue
 remove the first number from the queue
 add the new number to the queue
 add the removed number to the current subsequence value
 else
 add the new negative number to the current subsequence value

That way, you always keep the subsequence without the worst mark of the sequence, and if you encounter an even worst mark, you can restore the value of a previously dropped mark to the value of your subsequence.

answered Dec 24, 2012 at 15:10
1
  • Your approach is really good, but has a few flaws. Building on your approach... Commented Dec 25, 2012 at 19:15
1

The original algorithm is basically:

for each position:
 calculate best range ending at this position
print best over all possible ending positions

The best possible range ending at a position is the maximum of:

  • 0 (starting from scratch here)
  • the best possible range of the previous position + new mark

Now, we need to calculate K endings, for different amount of dropped tests

for each position:
 for k = 0 to K:
 calculate best possible range ending at this position and dropping at most k tests
print best of all calculated ranges

The best possible range ending is the maximum of:

  • 0 (starting a new range at this position)
  • the best possible range of the previous position + new mark
  • the best possible range of the previous position and one less dropped test
answered Dec 24, 2012 at 20:36

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.