博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

HDU-1159(Common Subsequence)(贪心)(动态规划)~~~~~~

题解出处:http://blog.csdn.net/a995549572/article/details/50829875

题目大致意思就是给你两个字符串,求出这两个字符串的最长子序列;

主要还是找状态转移方程式;辅助图帮助理解(但是我赶脚这个图还是带自己划一下才能好好的理解状态转移方程式)

                if(a[i-1]==b[j-1])
                    dp[i][j]=dp[i-1][j-1]+1;
                else
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
using namespace std;
int a[1002],dp[1002][1002];
int main()
{
    char a[1002],b[1002];
    while(scanf("%s%s",a,b)!=EOF)
    {
        int i,j;
        int len=strlen(a);
        int le=strlen(b);
        memset(dp,0,sizeof(dp));
        for(i=1; i<=len; i++)
        {
            for(j=1; j<=le; j++)
            {
                if(a[i-1]==b[j-1])
                    dp[i][j]=dp[i-1][j-1]+1;
                else
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            }
        }
        printf("%d\n",dp[len][le]);
    }
    return 0;
}

 

dp题,注意以%s输入的时候数组是从0开始存的.....

马上天梯赛了  选拔赛类时候出个这就懵逼了,还是带狂刷一波题啊.............

posted @ 2018-03-14 20:53  呦呦哟  Views(179)  Comments(0Edit  收藏  举报
Live2D