Can anyone help me with this dynamic programming problem. The problem is 225C - Barcode. I can't get the solution from editorial.
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | jiangly | 3631 |
| 4 | Kevin114514 | 3574 |
| 5 | maroonrk | 3521 |
| 6 | strapple | 3515 |
| 7 | Radewoosh | 3461 |
| 8 | tourist | 3428 |
| 9 | turmax | 3378 |
| 10 | Um_nik | 3376 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 162 |
| 2 | adamant | 148 |
| 3 | Um_nik | 146 |
| 4 | Dominater069 | 143 |
| 5 | errorgorn | 141 |
| 6 | cry | 138 |
| 7 | Proof_by_QED | 136 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 10 | soullless | 133 |
Can anyone help me with this dynamic programming problem. The problem is 225C - Barcode. I can't get the solution from editorial.
| Name |
|---|



First of all, we construct array of partial sums to calculate amount of pixels in some columns of some color in O(1). Let it be array w[]. w[i] — amount of white pixels in columns [1..i]. For each column we calculate amount of white pixels in it. Then,
w[0]=0; w[i]=w[i-1]+amount_of_white_pixels_in_column_i;Example:Now,
amount_of_white_pixels_in_columns [i..j] = w[j]-w[i-1];amount_of_black pixels_in_columns [i..j] = (j-i+1)*N - amount_of_white_pixels_in_columns [i..j];Now, lets build dp solution.
dp[0][0] = dp[1][0] = 0— obvious answer for zero columns.amount_of_white_pixels_in_columns [j-a+1..j](see first part) white pixels. Also, we need re-paint columns [1..j-a] so that column j-a is white. This is dp[1][j-a]. Similarly calculate dp[1][j]min(dp[0][M], dp[1][M])Feel free to ask if you cannot understand something.
So, you are given a nxm pixel picture. Now, you need to make a barcode picture by changing minimum number of pixels .
For a certain column you will either change every pixel of that column into black or white.To make every pixel of that column black : cost = number of white pixel of that column and vice versa.
now suppose you are in Kth column. Now dp[0][K] means minimum number of pixels needed to make a barcode picture and the color of last bar is Black(width of last bar can be x to y). And we only got the ans for 1 to Kth column.
So, to minimize complexity precompute. Let, preBlack[I][J] means number of Black pixels from Ith column to Jth column.
preWhite[I][J] is vice versa . Complexity : nm
now iterate through every column for every column take the minimum ans from all possible width of last bar and save ans.
for(I=1;I<=m;I++){
int Min1=inf,Min2=inf;
for(J=x;J<=y;J++){
}
dp[0][I]=Min1;
dp[1][I]=Min2;
}
Now the ans will be min( dp[0][m] , dp[1][m] );
Think about it a little bit.
but what if j > i
I guess He forgot to apply this condition. Increase j till it reaches minimum of i and y
Thank you very much