题目
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86754#problem/E
分析:
一个简单的动规,关键是学会人家对数据的处理方法,去好好练习,注意这种思想
dp[i+1][j+1]=dp[i+1][j]>dp[i][j+1]?dp[i+1][j]:dp[i][j+1];
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include<stdio.h>
int main()
{
int m,n,i,j,cont =0;
int a[110],b[110],dp[110][110];
while(scanf("%d %d",&m,&n))
{
if(m==0&&n==0)
break;
for(i=0; i<m; i++)
scanf("%d",&a[i]);
for(i=0; i<n; i++)
scanf("%d",&b[i]);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
if(a[i]==b[j])
dp[i+1][j+1]=dp[i][j]+1;
else
dp[i+1][j+1]=dp[i+1][j]>dp[i][j+1]?dp[i+1][j]:dp[i][j+1];
printf("Twin Towers #%d\nNumber of Tiles : %d\n\n",++cont,dp[m][n]);;
}
return 0;
}