首页 > 代码库 > poj 2192 zipper
poj 2192 zipper
今天突然发现我做了这道题,印象不大 ,但是一看题意 感觉很经典 ,所以决定写一下结题报告
首先这道题的题意是 给你三个字符串,前两个给你弄一下,然后可以构成一个字符串
,但是你要知道这个条件是
他们两个组成最后的字符串时不能改变先后顺序</p><p>得出两个状态方程
dp[i][j]表示这个前i个字符和前j个字符是否会构成s3的前i+j个字符
(1)dp[i][j]=(dp[i-1][j]&&s1[i]==s3[i+j])?ture:flase
(2)dp[i][j]=(dp[i][j-1]&&s2[j==s3[i+j])?true:flase
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; char s1[500],s2[500],s3[500]; int dp[500][500]; int main() { int t,i,j,k,len1,len2,len3,cas = 1 ; scanf("%d",&t); while(t--) { scanf("%s%s%s",s1+1,s2+1,s3+1); len1 = strlen(s1+1); len2 = strlen(s2+1); len3 = strlen(s3+1); memset(dp,0,sizeof(dp)); for(i = 1; i<=len1; i++) { if(s1[i] == s3[i]) dp[i][0] = 1; else break; } for(i = 1; i<=len2; i++) { if(s2[i] == s3[i]) dp[0][i] = 1; else break; } for(i = 1; i<=len1; i++) { for(j = 1; j<=len2; j++) { if(s3[i+j] == s1[i] && dp[i-1][j]) dp[i][j] = 1; if(s3[i+j] == s2[j] && dp[i][j-1]) dp[i][j] = 1; } } printf("Data set %d: ",cas++); if(dp[len1][len2]) printf("yes\n"); else printf("no\n"); } return 0; }
poj 2192 zipper
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。