博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3267 The Cow Lexicon 简单DP
阅读量:4487 次
发布时间:2019-06-08

本文共 1352 字,大约阅读时间需要 4 分钟。

题目链接: 

从后往前遍历,dp[i]表示第i个字符到最后一个字符删除的字符个数。

状态转移方程为:

dp[i] = dp[i+1] + 1;                                                 //当不能匹配时

dp[i] = std::min(dp[i], dp[msg] + (msg-i) - len[j]);  //当匹配时。

第i个字符到第msg个字符之间一共有msg-i个字符,减去字典中单词的长度,就是删除的字符数量。

1 #include 
2 #include
3 #include
4 int n, m, dp[610], len[610]; 5 char s[610], dic[610][30]; 6 int main() 7 { 8 while(scanf("%d %d", &n, &m) != EOF) 9 {10 scanf("%s", s);11 for(int i = 0; i < n; i++)12 {13 scanf("%s", dic[i]);14 len[i] = strlen(dic[i]);15 }16 dp[m] = 0;17 for(int i = m-1; i >= 0; i--)18 {19 dp[i] = dp[i+1] + 1;20 for(int j = 0; j < n; j++)21 {22 if(s[i] == dic[j][0] && m-i >= len[j])23 {24 int msg = i+1, cnt = 1;25 while(msg < m && dic[j][cnt])26 {27 if(s[msg++] == dic[j][cnt])28 cnt++;29 }30 if(cnt == len[j])31 dp[i] = std::min(dp[i], dp[msg] + (msg-i) - len[j]);32 }33 }34 }35 printf("%d\n", dp[0]);36 }37 return 0;38 }
View Code

 

转载于:https://www.cnblogs.com/wolfred7464/p/3252321.html

你可能感兴趣的文章
github第一步之初始化操作
查看>>
《CoderXiaoban团队》第一次作业:团队亮相
查看>>
使用vue脚手架vue-cli搭建项目
查看>>
四轴飞行器Bootloader和固件的更新
查看>>
NLP之电影评分数据的情感分析
查看>>
常用网站颜色代码
查看>>
gdb使用
查看>>
【bzoj1593-预定旅馆】线段树维护连续区间
查看>>
Maven的Scored介绍
查看>>
cookie 和session 的区别详解
查看>>
【Java】 大话数据结构(5) 线性表之双向链表
查看>>
【Java】 大话数据结构(6) 栈的顺序与链式存储
查看>>
java 断点续传(springMvc),可支持html5 vedio在线播放 posted @ 2017年3月11日 16:15:44...
查看>>
[入门阅读]怎样在android中解析JSON
查看>>
extjs中rowEditing动态编辑
查看>>
第10题 正则表达式匹配(动态规划)
查看>>
HTML入门
查看>>
[LeetCode] 23. Merge k Sorted Lists
查看>>
windows开启Apache的mod_rewrite模块
查看>>
Webform(分页、组合查询)
查看>>