抽卡
题目描述
有张卡片, 每张卡片上有一个字符串, 现在要求你从中选出张卡片, 使得在所有选取方案中, 这 张卡片连起来的字典序是最小的
思路
根据以下规则排序
1 | bool cmp(string a,string b){ |
排序后
为什么不选前 个?
当 排序后就会得到 的字典序小于 的错误结果
考虑 表示为以第i个字符串结尾的最小字典序
倒着跑一边01背包(某个字符串选或不选)
为什么不正向跑呢?
模拟一下样例
4 3
bbaba
bba
b
b
The answer for the following case is bbababb
, but it outputs bbababbab
.
错误答案前缀覆盖了正确答案,在正向dp的过程中无法对长度进行更改
Code
1 | int n,m; |
感性理解这个排序方式,类似于尝试思路
本题的tutorial也列举了很多错误的思考
来告诉我们需要think && try
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bzdhxs'blog!
评论