NOIP信息学---粉刷匠
Windy 有 NN 条木板需要被粉刷。 每条木板被分为 MM 个格子。 每个格子要被刷成红色或蓝色。 Windy 每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果 Windy 只能粉刷 TT 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。
DP解析
对于每一条木板,定义 f(i,j)f(i,j) 为前 ii 个格子粉刷 jj 次的最大正确粉刷数目(即价值)。
易得 f(i,j)=max{f(i−1,j),maxk=1,2,…,i{f(i−k,j−1)+sum(i,i−k),k−sum(i,i−k)}}f(i,j)=max{f(i−1,j),maxk=1,2,…,i{f(i−k,j−1)+sum(i,i−k),k−sum(i,i−k)}} 。
其中 sum(i,j)sum(i,j) 定义为在第 ii 至第 jj 个格子中颜色为蓝色的数目。用前缀和实现。
对于所有木板,定义 g(i,j)g(i,j) 为前 ii 条木板粉刷 jj 次的最大正确粉刷数目。
同理可得 g(i,j)=max{g(i−1,j),maxk=1,2,…,j{g(i−1,j−k)+f(m,k)}}g(i,j)=max{g(i−1,j),maxk=1,2,…,j{g(i−1,j−k)+f(m,k)}} 。
答案为 maxi=1,2,…,T{g(n,i)}maxi=1,2,…,T{g(n,i)} 。
NOIP信息学视频地址
视频地址
链接:https://pan.baidu.com/s/1tHo1DFMaDuMZAemNH60dmw
提取码:7jgr