设为首页 加入收藏

TOP

poj 2192 zipper
2015-07-20 17:34:26 来源: 作者: 【 】 浏览:2
Tags:poj 2192 zipper

今天突然发现我做了这道题,印象不大 ,但是一看题意 感觉很经典 ,所以决定写一下结题报告

首先这道题的题意是 给你三个字符串,前两个给你弄一下,然后可以构成一个字符串
,但是你要知道这个条件是
他们两个组成最后的字符串时不能改变先后顺序

得出两个状态方程

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 
  
   
#include 
   
     #include 
    
      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; } 
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[ACM] hdu 5045 Contest (状态压.. 下一篇leetcode - Triangle

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)