题目链接:http://codeforces.com/contest/1072/problem/D
给一个$n\times n$的字母阵,允许修改其中的$k$个字符,问从$(1,1)$走到$(n,n)$字典序最小的字符串。
如果不考虑替换的话,字典序最小的字符串可以由BFS得到。
如果考虑替换的话,首先知道替换掉的字符肯定都会把不是’a’的换成’a’。
接下来考虑DP,维护$dp(i,j)$为走到$(i,j)$处最多的’a’数量,这里不考虑$k$次替换。
由于是字典序最小,那么我们知道越早替换成’a’字典序一定是最小的,因此我们就确定了贪心地替换前面扫描的非’a’字符这样一个转移的无后效性。
DP转移可以这样:
$$
dp(i,j)=max(dp(i-1,j),dp(i,j-1))+(G(i,j)==’a’)
$$
接着考虑是否有足够的替换次数,于是存在$i+j-1-dp(i,j)$个待替换的非’a’字符,显然都替换掉字典序是最小的,于是我们拿这个和$k$比一下就可以确定当前字符$G(i,j)$是否需要替换。
1 |
|