zoukankan      html  css  js  c++  java
  • POJ3267 The Cow Lexicon(dp)

    题目链接

    分析:

    dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数。

    dp[i] = min(dp[i+res]+res-strlen(pa[j]));

    其中res 为从第 i 位开始匹配 pa[j] 所需要的长度。

    以下代码当做指针的练习,研究了几天C,发现C语言功底到底是提升了(虽说算法功底至今还木有)。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    const int maxn = 500;
    
    char s[maxn], pa[610][30];
    int dp[maxn];
    
    int match(char *s1, char *s2) {
        char *p1 = s1, *p2 = s2;
    
        while(*p1 && *p2) {
            if((*p1++ == *p2)) p2++;
        }
    
        if(*p2) return 0;
        else return p1-s1;
    }
    
    int main() {
        int W, L, i, res; char (*p)[30];
    
        scanf("%d%d", &W, &L);
    
        scanf("%s", s);
    
        for(i=0, p=pa; i<W; i++) {
            scanf("%s", *p++);
        }
    
        dp[L] = 0;
        for(int i=L-1; i>=0; i--) {
            dp[i] = dp[i+1]+1;
            for(int j=0; j<W; j++)
                if((res = match(&s[i], pa[j])))
                    dp[i] = min(dp[i], dp[i+res]+res-(int)strlen(pa[j]));
        }
    
        printf("%d
    ", dp[0]);
    
        return 0;
    }
  • 相关阅读:
    课堂练习四
    手头软件产品的评价
    学习进度条十
    典型用户和用户场景描述
    学习进度条九
    学习进度条八
    冲刺第十天
    冲刺第九天
    冲刺第八天
    冲刺第七天
  • 原文地址:https://www.cnblogs.com/tanhehe/p/3252316.html
Copyright © 2011-2022 走看看