poj2192 hdu1501 Zipper

                     dp[i][j]表示第一個字符串前i個與第二個字符串前j個字符能否組成第三個字符串前i+j個;

                       

#include<iostream>
#include<cstring>
#include<cstdio> 
using namespace std;
int main()
{
	int T;
	cin>>T;
	char str1[205], str2[205], str3[505];
	int len1, len2, len3;
	bool dp[505][505];
	for(int k=1; k<=T; k++)
	{
		scanf("%s%s%s", str1+1, str2+1, str3+1);
		memset(dp, 0, sizeof(dp));
		
		len1 = strlen(str1);
		len2 = strlen(str2);
		len3 = strlen(str3);
		
    	//這三個任意初始化就可以 
		//但是不知爲啥, 不初始化就不對,明明這三個使用不到的。我因爲沒初始化WR了n次	
		str1[0]='1';
		str2[0]='2';
		str3[0]='3';
		dp[0][0]=1;
	
   	    for(int i=0; i<len1; i++)
           for(int j=0; j<len2; j++)
           {
	             if((i>=1&&str3[i+j] == str1[i]&&dp[i-1][j]) || (j>=1&&str3[i+j] == str2[j]&&dp[i][j-1]))
				       dp[i][j]=1;
           }
   	      printf( "Data set %d: ", k);
          if(dp[len1-1][len2-1])  printf( "yes\n");
          else printf( "no\n");
	}
} 

發佈了136 篇原創文章 · 獲贊 2 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章