UVa 10029 - Edit Step Ladders
題目:已知一些字典序排列的單詞,問能從中找到最大的一個有序單詞集合,
使得集合中的單詞每一個是有上一個單詞經過一次變換得來的(增、刪、改)。
分析:dp,LIS。最大遞增子序列,不過數據較大须要優化。
因為,不是每一個單詞都是还有一個單詞的前驅,所以非常多查找是不必要的。
所以,利用每個單詞進行變換求出全部前驅,然後查找前驅是否在前面出現過;
假设出現過。則能够更新LIS。查找前驅的過程使用二分優化就可以節約時間。
說明:本來先用hash表+記憶化搜索,效率較低╮(╯▽╰)╭。
#include <cstring>
#include <cstdio> #define max(a, b) ((a)>(b)?(a):(b)) char list[25005][17], now[17], New[17];
int dp[25005]; int binary_search(int r, char words[])
{
int l = 0, mid = 0, cmp;
while (l <= r) {
mid = (l+r)>>1;
cmp = strcmp(list[mid], words);
if (!cmp) return mid;
if (cmp > 0) r = mid-1;
else l = mid+1;
}
return -1;
} int main()
{
int size = 0;
while (~scanf("%s",list[size])) ++ size; int maxv = 0;
for (int p = 0; p < size; ++ p) {
dp[p] = 1;
strcpy(now, list[p]);
int length = strlen(now), point = -1;
//删除元素
for (int i = 0; i < length; ++ i) {
if (now[i] < now[i+1]) continue;
int count = 0;
for (int j = 0; j < length; ++ j)
if (i != j) New[count ++] = now[j];
New[count ++] = 0;
point = binary_search(p-1, New);
if (point >= 0 && dp[p] <= dp[point])
dp[p] = dp[point]+1; }
//加入元素
for (int i = 0; i <= length; ++ i)
for (char k = 'a'; k <= 'z'; ++ k) {
if (k > now[i]) continue;
int count = 0;
for (int j = 0; j <= length; ++ j) {
if (i == j) New[count ++] = k;
New[count ++] = now[j];
}
New[count ++] = 0;
point = binary_search(p-1, New);
if (point >= 0 && dp[p] <= dp[point])
dp[p] = dp[point]+1;
}
//改变元素
for (int i = 0; i < length; ++ i)
for (char k = 'a'; k < now[i]; ++ k) {
strcpy(New, now);
New[i] = k;
point = binary_search(p-1, New);
if (point >= 0 && dp[p] <= dp[point])
dp[p] = dp[point]+1;
}
maxv = max(maxv, dp[p]);
} printf("%d\n",maxv);
return 0;
}
UVa 10029 - Edit Step Ladders的更多相关文章
- UVA - 10029 Edit Step Ladders (二分+hash)
Description Problem C: Edit Step Ladders An edit step is a transformation from one word x to another ...
- UVA 10029 Edit Step Ladders ——(DAG求最长路)
题意:升序的给出一本若干个单词,每个单词都可删除一个字母,添加一个字母或者改变一个字母,如果任意一个操作以后能变成另外一个字典中的单词,那么就连一条有向边,求最长的长度. 分析:DAG的最长路和最短路 ...
- Edit Step Ladders - UVA 10029
题意 题目链接(Virtual Judge):Edit Step Ladders - UVA 10029 题意: 如果单词 \(x\) 能通过添加.删除或修改一个字母变换为单词 \(y\),则称单词 ...
- uva 10026 Problem C: Edit Step Ladders
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- POJ2564:Edit Step Ladders
浅谈\(Trie\):https://www.cnblogs.com/AKMer/p/10444829.html 题目传送门:http://poj.org/problem?id=2564 记\(f[i ...
- UVa 10029 hash + dp
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- ACM训练计划step 1 [非原创]
(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
随机推荐
- maskrcnn_benchmark代码分析(3)
数据结构 数据加载 数据后处理
- python3 AttributeError: module 'sklearn' has no attribute 'linear_model'
以下导入方式报错 import sklearn lr = sklearn.linear_model.LinearRegression() # 需要导入sklearn的linear_model 修改导入 ...
- Centos curl ssl 替换 NSS 为 OpenSSL
参考:https://www.latoooo.com/xia_zhe_teng/368.htm 我的系统版本是 Centos 7 64位.为了方便,先安装常用的开发环境. yum groupinsta ...
- 一次Spark应用程序参数优化案例
并行度 对于*ByKey等需要shuffle而生成的RDD,其Partition数量依如下顺序确定:1. 方法的第二个参数 > 2. spark.default.parallelism参数 &g ...
- Pandas DataFrame笔记
1.属性方式,可以用于列,不能用于行 2.可以用整数切片选择行,但不能用单个整数索引(当索引不是整数时) 3.直接索引可以使用列.列集合,但不能用索引名索引行 用iloc取行,得到的series: d ...
- SharePoint CAML Query小结
CAML的结构. <View Type="HTML" Name="Summary"> <ViewBody ExpandXML="TR ...
- 可以在任何时候attach一个shader到program对象
可以在任何时候attach一个shader到program对象,不一定非要在指定source和编译以后,具体的描述如下: Once you have a program object create ...
- GIF添加3D加速
由于浏览器内核对Gif格式的图片会产生卡的情况,所以我们需要告诉浏览器,开启一下加速,方法很简单,就是利用css3的特性,强制告诉浏览器,这是个元素,需要3D转换,请务必开启加速效果 方法1 给gif ...
- 一步一步教你搭建和使用FitNesse
啄木鸟之家大吕 敏捷测试已成为现在式,尽早和持续的反馈成为各研发团队的必选项.测试同学也需要跟上这个趋势.除了“找bug”.“分析需求”.“功能测试”,还需考虑“交付质量.一次做对.在没有用户界面情况 ...
- 持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]
转载:https://www.abcdocker.com/abcdocker/2065 一.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkin ...