poj2129 dp

 //Accepted    320 KB    47 ms
 //dp
 //dp[i][j]=1 表示用s1的前i个,s2的前j个字符能构成s3的前i+j-1个字符
 //dp[i][j]=0 表示构不成
 //dp[i][j]=1 if (dp[i-1][j]==1 && s1[i-1]==s3[i+j-1] || dp[i][j-1]==1 && s2[j-1]==s3[i+j-1])
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 using namespace std;
 ;
 char s1[imax_n];
 char s2[imax_n];
 ];
 int dp[imax_n][imax_n];
 int n1,n2;
 void Dp()
 {
     memset(dp,,sizeof(dp));
     dp[][]=;
     ;i<=n1;i++)
     {
         ;
         ;j<=i;j++)
         ]!=s3[j-])
         flag=;
         dp[i][]=flag;
     }
     ;i<=n2;i++)
     {
         ;
         ;j<=i;j++)
         ]!=s3[j-])
         flag=;
         dp[][i]=flag;
     }
     ;i<=n1;i++)
     {
         ;j<=n2;j++)
         {
             ][j]== && s1[i-]==s3[i+j-]) dp[i][j]=;
             ]== && s2[j-]==s3[i+j-]) dp[i][j]=;
             //printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
         }
     }
     )
     {
         printf("yes\n");
     }
     else
     {
         printf("no\n");
     }
 }
 int main()
 {
     int T;
     scanf("%d",&T);
     ;t<=T;t++)
     {
         scanf("%s%s%s",s1,s2,s3);
         n1=strlen(s1);
         n2=strlen(s2);
         printf("Data set %d: ",t);
         Dp();
     }
     ;
 }
上一篇:最近发现的.net core中的一些bugs


下一篇:vs2010下载Microsoft Visual Studio 2010 Express(vs2010中文版下载)速成官方合集正式版