zoukankan      html  css  js  c++  java
  • poj 1159

    不得不说本人愚盹,动态规划的题也做了不少,但就是不得要领。

    此题 实质上是求最长公共子串,最长公共字串的dp解法想了半天想不出来,只能看百度百科了http://baike.baidu.com/view/2020307.htm

    题目描述:http://poj.org/problem?id=1159

    求完公共子串长度,然后用总长度一减即是结果

    没用滚动数组,short 水过

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    short maxS(short a,short b)
    {
    return a>b?a:b;
    }
    short dp[5002][5002];
    char a[5002];
    int main(int argc, char** argv) {

    short n,i,j,len;

    scanf("%d",&n);

    getchar();
    for(i=1;i<=n;++i)
    {
    scanf("%c",&a[i]);
    }
    //getchar();
    memset(dp,0,sizeof(dp));
    for(i=0;i<=n;++i)
    {
    dp[i][0]=0;
    dp[0][i]=0;
    }
    for(i=1;i<=n;++i)
    {
    for(j=n;j>=1;--j)
    {

    if(a[i]==a[j])
    {
    dp[i][n-j+1]=dp[i-1][n-j]+1;
    }
    else
    {
    dp[i][n-j+1]=maxS(dp[i][n-j],dp[i-1][n-j+1]);
    }
    }
    }
    printf("%d\n",n-dp[n][n]);

    return (EXIT_SUCCESS);
    }



  • 相关阅读:
    字符串练习题
    算法题
    readLine()
    grep家族
    java_IO
    集合框架
    常用类
    异常
    Mysql 图形工具 Navicat
    Mysql内置功能《一》流程控制
  • 原文地址:https://www.cnblogs.com/fengyuehan/p/poj1159.html
Copyright © 2011-2022 走看看