题目链接:http://codeforces.com/contest/1072/problem/D
给一个n×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 |
|
v1.5.2