NOIP信息学---粉刷匠

Windy 有 NN 条木板需要被粉刷。 每条木板被分为 MM 个格子。 每个格子要被刷成红色或蓝色。 Windy 每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果 Windy 只能粉刷 TT 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。

 

DP解析

对于每一条木板,定义 f(i,j)f(i,j) 为前 ii 个格子粉刷 jj 次的最大正确粉刷数目(即价值)。

易得 f(i,j)=max{f(i1,j),maxk=1,2,,i{f(ik,j1)+sum(i,ik),ksum(i,ik)}}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(i1,j),maxk=1,2,,j{g(i1,jk)+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

posted @ 2020-10-13 13:54  tianli3151  阅读(164)  评论(0编辑  收藏  举报