博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DP_字串匹配(HDU_1501)
阅读量:5277 次
发布时间:2019-06-14

本文共 1108 字,大约阅读时间需要 3 分钟。

最优子结构分析:如果A、B可以组成C,C最后一个字母必定是A或B的最后一个字母组成。

C去除除最后一位,变成是否可以求出A-1和B或A和B-1是否可以构成C-1
状态转移方程:用f[i][j] 表示A前 i 位和B前 j 位是否可以组成C的前i+j位        
    dp[i][j] = (dp[i-1][j] && A[i]==C[i+j]) || (dp[i][j-1] && B[j]==C[i+j])

#include 
#include
#define M 202char A[M],B[M],C[M*2];int dp[M][M];int run(){ scanf("%s%s%s",A + 1,B + 1,C + 1); int aLen = strlen(A + 1); int bLen = strlen(B + 1); int cLen = strlen(C + 1); for(int i=1; i<=aLen; i++) { if(A[i] == C[i]) dp[i][0] = 1; } for(i=1; i<=bLen; i++) { if(B[i] == C[i]) dp[0][i] = 1; } for(i=1; i<=aLen; i++) { for(int j=1; j<=bLen; j++) { dp[i][j] = (dp[i-1][j] && A[i]==C[i+j]) || (dp[i][j-1] && B[j]==C[i+j]); } } return dp[aLen][bLen];}int main(int argc, char* argv[]){ #ifdef __MYLOCAL freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); for(int i=1; i<=t; i++) { printf("Data set %d: %s\n",i,run() ? "yes" : "no"); } return 0;}

 

转载于:https://www.cnblogs.com/lk1993/p/3227068.html

你可能感兴趣的文章
P4294 [WC2008]游览计划
查看>>
数值分析方法库
查看>>
交换两个变量值的方法汇总
查看>>
使用lua扩展应用程序
查看>>
maven新建项目报错
查看>>
Hbase记录-HBase增删改查
查看>>
JAVA-常用集合类型转换例子(基础必备)
查看>>
hello word ,好吧协会最菜真的是从头开始在复习,不过我打算稍微过一遍基本知识之后好好捡起来数据结构...
查看>>
tcp服务器
查看>>
java bigdecimal
查看>>
ListCtrl添加右键菜单(在对话框类中)
查看>>
For-Each循环
查看>>
斜率优化dp*
查看>>
SQL通用分页存储过程
查看>>
ApacheCN 活动汇总 2019.2
查看>>
HOJ 1447 Compromise (DP)
查看>>
iOS8新特性之交互式通知
查看>>
Android 位置服务
查看>>
Java中的Object类
查看>>
hdu2053
查看>>