BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典(单调DP)

 

【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1633

 

【题目大意】

  给出一个字符串和一个字符串集,
  问要删去多少个字符该字符串才可以被字符串集完全表示

 

【题解】

  dp[i]表示长度为i时候的答案,单调dp即可

 

【代码】

#include <cstdio>
#include <algorithm>
#include <cstring> 
using namespace std;
const int N=1010;
char s[N],c[N][35];
int n,len,k,dp[N];
int main(){
    scanf("%d%d %s",&n,&len,s+1);
    for(int i=1;i<=n;i++)scanf("%s",c[i]+1);
    for(int i=1;i<=len;i++){
        dp[i]=i;
        for(int j=1;j<=n;j++){
            int l=strlen(c[j]+1),cnt=0;
            for(k=i;k;k--){
                if(c[j][l]==s[k])l--;
                else cnt++;
                if(!l)break;
            }if(!l)dp[i]=min(dp[i],dp[k-1]+cnt);
        }
    }printf("%d\n",dp[len]);
    return 0;
}
posted @ 2017-07-13 15:41  forever97  阅读(185)  评论(0编辑  收藏  举报