继续骚一把,之前已经AC了,但是没有用上DP,现在用上了
与上一篇一样,用了滚动数组
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int roll[ 210 ];
int main()
{
string a, b, c, t;
int mark, mark2, i, m, n;
cin >> mark;
mark2 = 0;
while( mark2 < mark )
{
cin >> a >> b >> c;
if( a[ 0 ] != c[ 0 ] )
{
t = b;
b = a;
a = t;
}
memset( roll, 0, a.length() * sizeof( int ) );
roll[ 0 ] = 1;
for( i = 1; i < a.length(); i++ )
{
if( a[ i ] == c[ i ] )
roll[ i ] = 1;
else
break;
}
for( m = 0; m < b.length(); m++ )
{
for( n = 0; n < a.length(); n++ )
{
if( n > 0 )
{
if( ( roll[ n ] == 1 && b[ m ] == c[ m + n + 1 ] ) || ( roll[ n - 1 ] == 1 && a[ n ] == c[ m + n + 1 ] ) )
roll[ n ] = 1;
else
roll[ n ] = 0;
}
else
if( roll[ n ] == 1 && b[ m ] == c[ m + n + 1 ] )
roll[ n ] = 1;
}
}
mark2++;
cout << "Data set " << mark2 << ": ";
if( roll[ a.length() - 1 ] )
cout << "yes" << endl;
else
cout << "no" << endl;
}
return 0;
}
sorry,没写注释,不明白的可以留言