POJ 3267 The Cow Lexicon 解题报告
#include<iostream>
#include<cstring>
using namespace std;
char words[601][30];
char str[301];
int deleteNum[301];
int minOfThree(int a,int b,int c);
int main()
{
int w,l;
cin>>w>>l;
cin>>str;
for(int i = 0 ; i < w ; i ++)
scanf("%s",words[i]);
int len = strlen(str);
deleteNum[len] = 0;
for(int i = len - 1 ; i >= 0 ; i --)
{
deleteNum[i] = 301;
for(int j = 0 ; j < w ; j ++)
{
int isMatch = 0;
int posWord = 0,posStr = i;
while(words[j][posWord] && posStr < len)
{
if(words[j][posWord] == str[posStr])
posWord ++;
posStr ++;
}
if(!words[j][posWord])
deleteNum[i] = minOfThree(deleteNum[i],deleteNum[i + 1] + 1,deleteNum[posStr] + posStr - i - posWord);
else
deleteNum[i] = (deleteNum[i] < deleteNum[i + 1] + 1)?deleteNum[i]:deleteNum[i + 1] + 1;
}
}
cout<<deleteNum[0];
return 0;
}
int minOfThree(int a,int b,int c)
{
return (a < b && a < c)?a:(b < c)?b:c;
}Last updated
Was this helpful?