Sane's Monthly Algorithms Challenge: October 2008

Jumpscotch (Senior Level)

Hopscotch is a simple game which can be played with a group or family or individually.
Diana has been playing the game for years and is easily the best Hopsscotch player on the playground.
Her friends have decided to challenge her title by inventing a complicated version of Hopscotch called "Jumpscotch."

In Jumpscotch, a single row of squares is drawn along the ground and a positive integer is drawn inside each square.
Starting on the first square, Diana must jump from square to square and finish on the last square.
Afterwards, her 'score' is the sum of all numbers which she has touched.
The objective of Jumpscotch is to get a lower score than your opponent.

Diana knows that she is only strong enough to hop a certain distance (d).
She is also smart enough to know that with this limitation, the best 'path' is not always obvious.
Diana wants your help in determining the best path, given each square's value and her maximum hopping distance.

Input

On the first line, the integers n (1 ≤ n ≤ 1,000,000) and d (1 ≤ d ≤ 10).
There will be one test case where Diana has super human strength and d = 5,000 while n = 1,000,000.

The next n lines that follow have positive integers ≤ 1000, representing the number drawn inside each square.
These lines are listed, in order, from start to finish.

Output

On a single line, output the smallest possible score that Diana can obtain.

It appears that this is due to some undocumented bug in either the hypervisor, or the kernel, or both, and doesn't occur for C and C++ programs because those will always only use one core at a time unless specifically written multi-threaded, whereas it occurs for Java programs because the JVM always launches about a dozen threads. After disabling SMP support on the kernel: CPU time usage reported is now "reasonable" in all cases, although sometimes it's still greater than the time limit, and I don't know why.
These issues may be permanently fixed if we can move to a fully virtualized platform or a dedicated server. However, that is not likely to happen soon, because we are poor students.
Meanwhile, if your program is being "Killed" near 2 s, it probably means TLE.

It appears that this is due to some undocumented bug in either the hypervisor, or the kernel, or both, and doesn't occur for C and C++ programs because those will always only use one core at a time unless specifically written multi-threaded, whereas it occurs for Java programs because the JVM always launches about a dozen threads. After disabling SMP support on the kernel: CPU time usage reported is now "reasonable" in all cases, although sometimes it's still greater than the time limit, and I don't know why.

These issues may be permanently fixed if we can move to a fully virtualized platform or a dedicated server. However, that is not likely to happen soon, because we are poor students.

Meanwhile, if your program is being "Killed" near 2 s, it probably means TLE.

Sorry guys for the delayed response(I had exams). Thanks for the corrections, bbi5291. But could someone please tell me whether my implementation in O(nlogd) ?( or is it O(n^2) in worst case ? ). Or a hint ?

Sorry guys for the delayed response(I had exams). Thanks for the corrections, bbi5291. But could someone please tell me whether my implementation in O(nlogd) ?( or is it O(n^2) in worst case ? ). Or a hint ?