大致题意:
给出一个长度为l的文本和一个由n个单词组成的字典。求至少从文本中去掉多少个字符才能使得这个文本全部由字典中的单词组成。
大致思路:
DP,转移方程为dp[i]=min(dp[i-1]+1,dp[pos+1]+i-pos-1-tmp);//dp[i]为前i个字符中需要去掉的字符数量。
转移的示例如下,这里文本是browndcodw 文本是cow,从str[9]开始匹配~~
b r o w n d c o d w
c o w //找到一个匹配,并需要剔除一个字母。所以dp[10]可以从dp[6]转化而来。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char str[1000];
char word[1000][30];
int dp[1000];
int main(){
int n,len,i,j,pos,k,tmp;
while(scanf("%d%d",&n,&len)!=EOF){
scanf("%s",str);
for(i=0;i<n;i++){
scanf("%s",word[i]);
}
dp[0]=0; //前i个字符中包含的非法字符数量
for(i=1;i<=len;i++){
dp[i]=dp[i-1]+1;
for(j=0;j<n;j++){
tmp=k=strlen(word[j]);
k-=1;
pos=i-1;
while(pos>=0&&k>=0){
if(str[pos]==word[j][k]){
k--;
}
pos--;
}
if(k<0){ //可以匹配出一个单词
dp[i]=min(dp[i],dp[pos+1]+i-pos-1-tmp);
}
}
}
printf("%d\n",dp[len]);
}
return 0;
}
分享到:
相关推荐
北大POJ3267-The Cow Lexicon
《POJ3267 - The Cow Lexicon》是一道源于北京大学在线判题系统POJ(Problem Online Judge)的编程竞赛题目。这道题目主要涉及数据结构与算法的知识,特别是字符串处理和字典树(Trie)的应用。下面将详细阐述这个...
- POJ 1837、POJ 1276:基础动态规划问题。 #### 多维动态规划 - **题目示例**: - POJ 3267、POJ 1836:多维状态转移方程。 - POJ 1260、POJ 2533:涉及多个变量的状态转移。 - POJ 3176、POJ 1080:复杂的...
### poj dp总结:动态规划分类 #### 概述 动态规划(Dynamic Programming,简称DP)是一种在计算机科学和数学中广泛使用的算法策略,用于解决最优化问题。它通过将复杂问题分解为较简单的子问题来求解,并利用这些...
- POJ 3267: 0-1背包问题 - POJ 1836: 完全背包问题 - POJ 1260: 多重背包问题 - POJ 2533: 背包问题的特殊应用 - **编辑距离**:用于计算两个字符串之间的最小编辑距离。 - **示例题目**: - POJ 3176: 编辑...
标题中的“动态规划算法poj1088滑雪实验报告”指的是使用动态规划算法解决北京大学ICPC在线测评系统POJ中编号为1088的滑雪问题。这个问题旨在通过一个直观的应用实例,帮助学习者深入理解动态规划的概念,并熟练运用...
poj 1989 The Cow Lineup.md
【标题】"POJ2092:计数排序,求第K大的元素"是一个编程题目,主要涉及计数排序算法以及如何在数组中找出第K大的元素。计数排序是一种非基于比较的排序算法,它适用于整数排序,尤其在数据范围不大的情况下效率极高。...
PKU Online Judge上面很全面的动态规划试题总结。动态规划是ACM考点中最重要的一大类算法之一,对于工作人员来说,动态规划也是实际开发中经常会遇到的算法。这是POJ上面很多DP题目的总结与深刻分析。利于算法学习,...
- (poj3267, poj1836, poj1260, poj2533):零一背包、完全背包等问题的解决方案。 3. **二维动态规划**: - (poj3176, poj1080, poj1159):多维状态转移方程的应用。 ### 五、组合数学 1. **排列组合基础**: ...
【标题】"POJ1015-Jury Compromise" 是一个编程竞赛题目,主要涉及的是动态规划(Dynamic Programming, 简称DP)的算法应用。动态规划是一种解决复杂问题的有效方法,它通过将问题分解成子问题,并存储子问题的解来...
北京大学的在线编程竞赛平台POJ(Problem Online Judge)为初学者提供了一系列的编程题目,其中“北大POJ初级-动态规划”是专门为学习和训练这个主题设立的板块。在这个部分,学员可以通过解题报告和已通过验证(AC...
1. **问题类型**:可能是一个动态规划问题,因为这类问题通常涉及到状态转移,并且经常出现在POJ等在线判题系统中。 2. **题目背景**:“Catch That Cow”可能描述了一个农场主试图捕捉逃跑的奶牛的情境,要求计算...
综上所述,"POJ3176-Cow Bowling"不仅是一道挑战性的编程题目,更是学习动态规划和概率计算的实战案例。通过理解和解决这个问题,我们可以提升对这两种算法的理解,同时增强在实际编程中运用它们的能力。
POJ上的一道题目,自己写的代码,因为想下载别人的, 所以就放上了。
该题目主要考察的是动态规划和矩阵链乘法的知识,要求参赛者编写程序解决一个具有策略性的游戏问题。 【描述】 题目描述如下:两个人玩一个游戏,游戏的棋盘上有一系列数字。每次玩家可以选择一对相邻的数字,它们...
【标题】"POJ1163 - The Triangle" 是北京大学在线编程平台POJ上的一道算法题目。这道题目通常被归类为计算机科学与信息技术领域的算法问题,特别是涉及数据结构和动态规划的子领域。 【描述】该题目的解题报告详细...
poj经典动态规划题目解题报告,包括经典的动态规划题目20多道,可以作为学习动态规划系统的资料,包括题目: Pku acm 1179 Polygon Pku acm 1125 Stockbroker Grapevine Pku acm 1160 post office Pku ...
- poj3267: 涉及到DP模型问题,适合用动态规划解决。 #### 六、数学 ##### 1. 组合数学 - **定义**: 组合数学是研究有限集合的不同计数组合方式的一门学科。 - **应用场景**: 在概率统计、计算机科学等领域广泛...