我正在尝试解决此招聘竞赛问题(现已关闭)
词典行
您将获得一个字符矩阵。在一项操作中,您可以删除 矩阵的一列。您可以执行任意数量的操作 想。您的任务是使最终矩阵有趣,即 行的字符组成的字符串在字典上较小 或等于由行字符组成的字符串。你需要 使用尽可能少的操作数。空矩阵是 总是一个有趣的矩阵。
输入
第一行包含两个整数和。接下来的行包含 每个字母。
输出
在输出中,您需要打印最少数量的操作 使矩阵有趣。
约束
输入中只有小写英文字母作为字符。
样本输入
3 3
cfg
agk
dlm
示例输出
1
说明
删除第一列以使矩阵有趣。
我非常确信这是DP问题。我在寻找最佳子问题时遇到了困难。我只通过了几个测试用例
我将dp[i][j]
定义为要删除的具有有趣矩阵的最小列数。
对于每个字符input[i][j]
,都有两种可能性。
dp[i][j - 1]
,而当前输入不会改变任何内容。input[i -1][j]
和input[i][j]
的顺序是否正确,我们认为dp[i][j - 1]
还是无效的,因此我们在{{ 1}} 我的儿子。代码
1
答案 0 :(得分:1)
我们可以遍历从左到右的列,选择那些不会使当前矩阵变得无趣的列。正确实现后,这将花费时间与输入大小成线性关系。
支持该算法的关键事实是,给定了两个有趣的列子集,我们可以将第一个缺少的列添加到另一个列中,而不会使其变得无趣。