POJ 2192 (DP)
题目:http://poj.org/problem?id=2192
题意:从a、b串组合出c串,如果可以,输出“yes”,否则输出“no”
组合规则:不能乱序,只能顺序从a.b串中去字符。
#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; char a[201],b[201],c[402]; /* flag[i][j]== true ;表示 a的前i个,b的前j个可以组合出c的前i+j个 flag[i][j]== false;表示 a的前i个,b的前j个不可以组合出c的前i+j个 */ bool flag[201][201]; int main() { int T,la,lb,i,j,cc=1; scanf("%d",&T); do { scanf("%s%s%s",a,b,c); la = strlen(a); lb = strlen(b); memset(flag,false,sizeof(flag)); flag[0][0] = true;//都是空的,起点设置为true for(i = 0 ; i <= la ; ++i ) for(j = 0 ; j <= lb ; ++j ) { if( i>0 && flag[i-1][j] && a[i-1] == c[i+j-1]) flag[i][j] = 1; if( j>0 && flag[i][j-1] && b[j-1] == c[i+j-1]) flag[i][j] = 1; } printf("Data set %d: ",cc++);//刚开始把这个变量设置为c,害我调试好久 if(flag[la][lb]) puts("yes"); else puts("no"); }while(--T); //system("pause"); return 0; }