1458 poj--zoj 1733---------------记忆式搜索

#include <iostream>
#include <string.h>
#define N 1005
using namespace std ;
char s1[N],s2[N];
int dp[N][N],ans,len1,len2;

int max(int a,int b)
{ return a>b ? a : b ; }

int f(int x,int y)
{

if (dp[x][y]!=-1)               return dp[x][y];
if ( x==0 || y==0 )           return dp[x][y]=0;
else     if (s1[x-1]!=s2[y-1])   return dp[x][y]=max( f(x-1,y),f(x,y-1));
              else                        return dp[x][y]=f(x-1,y-1)+1;
}
int main()
{ int n,i,j ;
while ( cin>>s1>>s2 )
{ len1=strlen(s1); len2=strlen(s2);
memset(dp,-1,sizeof(dp));
f(len1,len2);
ans=0;
for (i=0; i<=len1; i++)
for (j=0; j<=len2; j++)
if ( ans<dp[i][j] ) ans=dp[i][j] ;
cout << ans << endl ;
}
return 0 ;
}

*******************************************************************************

#include <iostream>
#include <string.h>
#define N 1005
using namespace std ;
char s1[N],s2[N];
int a[N][N],ans,len1,len2;
int max(int a,int b)
{ return a>b ? a : b ; }

int f(int x,int y)
{

if (a[x][y]!=-1)                       return a[x][y];
if ( x==0 || y==0 )                return a[x][y]=0;
        else      if (s1[x-1]!=s2[y-1])              return a[x][y]=max( f(x-1,y),f(x,y-1));
                else                                         return a[x][y]=f(x-1,y-1)+1;
}
int main()
{

int n,i,j ;
while ( cin>>s1>>s2 )
{

len1=strlen(s1); len2=strlen(s2);
memset(a,-1,sizeof(a));
f(len1,len2);
ans=0;
for (i=0; i<=len1; i++)
for (j=0; j<=len2; j++)
if ( ans<a[i][j] ) ans=a[i][j] ;
cout << ans << endl ;
}
return 0 ;
}

1458 poj--zoj 1733---------------记忆式搜索,布布扣,bubuko.com

时间: 2024-10-05 11:24:06

1458 poj--zoj 1733---------------记忆式搜索的相关文章

poj 最长公共子序列 1458 记忆式搜索

#include <iostream>using namespace std;#include<cstring>#define N 1005char s1[N],s2[N];int dp[N][N];int max(int a,int b) {  return a>b ? a:b ;} int f(int x ,int y){ if(dp[x][y]!=-1) return dp[x][y]; if(x==0||y==0)    return dp[x][y]=0; else

poj 2533 poj 2533 poj 2533 记忆式搜索1 2

#include <iostream>#include <cstring>#define N 10005using namespace std;int a[N],b[N],n,maxlen=1;int f( int x){ int i,m,t; if ( b[x]>0 ) return b[x]; m=1; for (i=0;i<x; i++) {    t=f(i);         if (a[x]>a[i])  m=max(m,f(i)+1);       

(RQoj 15 采药------rwkj 10.1.5.253 1447) 记忆式搜索 2

#include <iostream>#include <string.h>using namespace std;int dp[105][1005], w[105],v[105],T,M,;int max(int x,int y) { return x>y?x:y; }int f(int x,int y){ int t; if (dp[x][y]!=-1) return dp[x][y]; if ( x==M+1 || y==0 ) return dp[x][y]=0; e

[ACM] poj 1088 滑雪 (记忆化搜索DFS)

求n*m网格内矩形的数目[ACM] poj 1088 滑雪 (记忆化搜索DFS),布布扣,bubuko.com

(RQoj 15采药------rwkj 10.1.5.253 1447) 记忆式搜索 1

#include <iostream>using namespace std;int dp[105][1005],w[105],v[105] ; int max(int a,int b) { return a > b ? a : b; }int f(int x,int y){ int t ; if(dp[x][y]!=-1) return dp[x][y] ; if(x==0 || y==0 ) return dp[x][y]=0 ; else { t=f(x-1,y) ; if(y&g

poj 3156 hash+记忆化搜索 期望dp

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m; #define N 32 #define mod 10007LL #define mod2 10000007 #define inf 0x3fffffff typedef long long ll; typedef double dd; int f[N]

nyist 17 -----记忆式搜索------Accept

//记忆式搜索 #include <iostream>#include<stdio.h>#include<string.h>using namespace std;char a[10002];int b[10002];int n,ans;int f(int x){ int i,t; if(b[x]>0) return b[x]; b[x]=1; for(i=0;i<=x-1;i++) { t=f(i); if(a[i]<a[x] &&

ppt Fibonacii数列的第n项------记忆式搜索

#include <stdio.h>#define MAX 50+1int a[MAX];int fib(int n){ if (a[n]==-1)     return   a[n]=fib(n-1)+fib(n-2);           else          return   a[n]; }int main( ){ int i,n; for(i=1; i<MAX; i++) a[i]=-1; a[0]=a[1]=1; scanf("%d",&n);

POJ 4968 DP||记忆化搜索

给出N个人的平局分X 根据GPA规则计算可能的最高平均GPA和最低平均GPA 可以DP预处理出来所有结果  或者记忆化搜索 DP: #include "stdio.h" #include "string.h" int inf=100000000; double a[11][1100],b[11][1100]; double Max(double a,double b) { if (a<b) return b; else return a; } double M

POJ 1088 滑雪(记忆化搜索+dfs)

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 83489   Accepted: 31234 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17