I can't understand dp solution of — http://codeforces.net/contest/225/problem/C. Can anyone please explain it in a simple way?
# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
# | User | Contrib. |
---|---|---|
1 | cry | 166 |
2 | maomao90 | 163 |
2 | Um_nik | 163 |
4 | atcoder_official | 161 |
5 | adamant | 160 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | nor | 153 |
9 | Dominater069 | 153 |
I can't understand dp solution of — http://codeforces.net/contest/225/problem/C. Can anyone please explain it in a simple way?
Name |
---|
The grid has n rows and m columns.
We first calculate what is the cost for each column to turn it into black and white as well. Suppose we store the number of white cells in columns in an array whiteCount[n].
consider a 2-d array dp[n][2];
dp[i][0]=minimum cost to convert the current column completely into black and have the barcode valid.
dp[i][1]=minimum cost to convert the current column completely into white and have the barcode valid.
Now,
Let's iterate through 1 to m columns.
At every column, we have two choices.We paint it completely black or completely white. But, we also have to make sure that we have atleast x-1 and atmost y-1 columns behind the current column which have the same color.
Suppose we are at column i. We now iterate j through columns i-y+1 to i-x+1 and find the cost to convert those columns to black.And the j-1 column should certainly have white.
So, the dp relation would be,
dp[i][0] would be minimum of (sum of whiteCounts from j to i + dp[j-1][1])
dp[i][1] would be minimum of (sum of blackCounts(can be obtained easily if you know whiteCounts) from j to i + dp[j-1][0])
Also, you can save time by checking out this blog entry and reading partial sum :)