poj3267The Cow Lexicon

来源:互联网 发布:淘宝中差评屏蔽软件 编辑:程序博客网 时间:2024/06/07 11:27

http://poj.org/problem?id=3267

第一个接触动态规划:

状态方程:

这篇博客比较好:http://user.qzone.qq.com/289065406/blog/1299653270

#include<stdio.h>#include<string.h>char dict[600][25],mesg[300];int dp[301],wordlen[600];int min(int a,int b){return a<b?a:b;}int main(){int w,L,i,j,len,pm,pd;while(scanf("%d %d",&w,&L)!=EOF){scanf("%s",mesg);for(i=0;i<w;i++){scanf("%s",dict[i]);wordlen[i]=strlen(dict[i]);}    /*Initial*/dp[L]=0;//dp[i]表示从i到L所删除的字符数/*Dp-Enum*/for(i=L-1;i>=0;i--)  //从message尾部开始向前检索{dp[i]=dp[i+1]+1;  //字典单词和message无法匹配时,删除的字符数(最坏的情况)for(j=0;j<w;j++) //对字典单词枚举{len=wordlen[j];if(len<=L-i && dict[j][0]==mesg[i])  //单词长度小于等于当前待匹配message长度{                                    //且单词头字母与信息第i个字母相同pm=i;  //message的指针pd=0;  //单词的指针while(pm<L) //单词逐字匹配{if(dict[j][pd]==mesg[pm++])pd++;if(pd==len){     //字典单词和message可以匹配时,状态优化(更新)dp[i]=min(dp[i],dp[pm]+(pm-i)-len);//dp[pm]表示从pm到L删除的字符数break;                            //(pm-i)-pd表示从i到pm删除的字符数}                                     //则dp[pm]+(pm-i)-pd表示从i到L删除的字符数}}}}printf("%d\n",dp[0]);}return 0;}


0 0
原创粉丝点击