#include "stdafx.h"
#include<string.h>
#include <math.h>
int max(int x,int y)
{
return x > y ? x : y;
}
int main()
{
//输入规模。
int n = 0;
/*
scanf_s("%d",&n);
printf("%d\n",n);
int **array= new int* [n];
for (int i =0; i < n; i++)
{
array[i] = new int[n + 1]{0};
}
printf("%d",*(array[0]+0));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n + 1; j++)
{
scanf_s("%d", (array[i]+j));
printf("%d",*(array[i]+j));
}
}
*/
//最长公共子序列。
char *p = "kobe bye";
printf("%d", strlen(p));
char *pp = new char[strlen(p)];
int length =9;
int array[9][9];
for (int i = 0; i < 9; i++)
{
pp[strlen(p)- 1 - i] = p[i];
}
for (int i = 0; i < length; i++)
{
array[i][0] = 0;
array[0][i] = 0;
}
for (int i = 1; i <= length; i++)
{
for (int j = 1; j <= length; j++)
{
if (p[i-1] == pp[j-1])
{
array[i][j] = array[i - 1][j - 1] + 1;
}
else
{
array[i][j] = max(array[i][j- 1], array[i - 1][j]);
}
}
}
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length; j++)
{
printf("%d ",array[i][j]);
}
printf("\n");
}
//如何矩阵的值找到最长子序列。
printf("\n");
for (int i = length-1; i>=1; i--)
{
for (int j = length - 1; j >= 1; j--)
{
if (p[i] == p[j])
{
printf("%c",p[i]);
}
if (array[i][j - 1] > array[i - 1][j])
{
j--;
}
else
{
i--;
}
}
}
scanf_s("%d", &n);
}
#include<string.h>
#include <math.h>
int max(int x,int y)
{
return x > y ? x : y;
}
int main()
{
//输入规模。
int n = 0;
/*
scanf_s("%d",&n);
printf("%d\n",n);
int **array= new int* [n];
for (int i =0; i < n; i++)
{
array[i] = new int[n + 1]{0};
}
printf("%d",*(array[0]+0));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n + 1; j++)
{
scanf_s("%d", (array[i]+j));
printf("%d",*(array[i]+j));
}
}
*/
//最长公共子序列。
char *p = "kobe bye";
printf("%d", strlen(p));
char *pp = new char[strlen(p)];
int length =9;
int array[9][9];
for (int i = 0; i < 9; i++)
{
pp[strlen(p)- 1 - i] = p[i];
}
for (int i = 0; i < length; i++)
{
array[i][0] = 0;
array[0][i] = 0;
}
for (int i = 1; i <= length; i++)
{
for (int j = 1; j <= length; j++)
{
if (p[i-1] == pp[j-1])
{
array[i][j] = array[i - 1][j - 1] + 1;
}
else
{
array[i][j] = max(array[i][j- 1], array[i - 1][j]);
}
}
}
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length; j++)
{
printf("%d ",array[i][j]);
}
printf("\n");
}
//如何矩阵的值找到最长子序列。
printf("\n");
for (int i = length-1; i>=1; i--)
{
for (int j = length - 1; j >= 1; j--)
{
if (p[i] == p[j])
{
printf("%c",p[i]);
}
if (array[i][j - 1] > array[i - 1][j])
{
j--;
}
else
{
i--;
}
}
}
scanf_s("%d", &n);
}