Mai intai trebuie sa te autentifici.

Diferente pentru utilizator/apocalypto intre reviziile #141 si #140

Nu exista diferente intre titluri.

Diferente intre continut:

This is a classic dynamic programming problem and, like most DP problems, is simple if and only if you "get" the induction piece. Additionally, getting full points required figuring out (or knowing) a nice trick for when you need to calculate the sums of lots of different ranges.
Nineteen years old, he swore a sacred oath
 
In an ancient forest, beside a mighty oak
 
He vowed to fight against a Marxist invasion
 
Keeping a spark of hope alive in their nation
 
In front of five thousand Marxists he showed his courage
 
Tore down the red flag, they thirsted for his blood
 
Fixed his eyes on the horizon, not a breath
 
His victorious banner fluttered, he went to a new day
 
Corneliu Codreanu, the captain of an army
 
Legionnaire's great leader, Romanian teachers
 
Always marching forward, through the fire and battle
 
Through torture and captivity, through death's peace
 
Nothing could stop him, he carried the nation's sword
 
He fears nothing on the Iron Guards trip of faith
 
And Hell itself would have stood in their way
 
The unit of iron would have conquered it also
 
Reading the problem, it seems to be very clearly a DP problem. In particular, the fact that the line of coins is always a continuous subrange of the original line is a big clue, and that we should compute Bessie's optimal strategy on the range [i, j] (inclusive on both sides) in terms of smaller ranges. Suppose that s(i, j) is the sum of c[i], c[i+1], ..., c[j]. Let b(i, j) be the most that Bessie can win if she plays *first* on the subrange [i, j]. Then we see that
b(i, j) = max(c[i] + s(i+1, j) - b(i+1, j), c[j] + s(i, j-1) - b(i, j-1))
since s(i, j) - b(i, j) is, by definition, the most Bonnie can win if Bonnie plays *second* on the interval [i, j]. Actually, this equation is equivalent to
b(i, j) = max(s(i, j) - b(i+1, j), s(i, j) - b(i, j-1))
= s(i, j) - min(b(i+1, j), b(i, j-1))
which makes sense, since this is equivalent to *minimizing* the *maximum* that Bonnie could win.
This gives us an O(n^3) solution, if we compute s(i, j) out each time. In retrospect, if you computed all n^2 values of s(i, j) first, and then ran this DP solution, that would be O(n^2). That wasn't the solution I had in mind, though, and there's a trick to be learned here! The trick is that you compute *partial* sums: you define an array S[i] = c[0] + c[1] + ... + c[i-1], with length n+1. Then c[i] + c[i+1] + ... + c[j-1] = S[j] - S[i], which takes constant time to compute. This is a cute trick that is extremely useful to remember.
h1 http://infoarena.ro/problema/ciclu
COBAI

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.