1501 Zipper
来源:互联网 发布:中俄关系 知乎 编辑:程序博客网 时间:2024/05/17 07:26
http://acm.hdu.edu.cn/showproblem.php?pid=1501
首先先定义一个bool类型的2维数组p[201][201 ]用来表示s1[ i ] 、s2[ j ] 能否组成s[ i + j ] 。能则p[ i ][ j ] = 1,反之为0.
然后进行初始化。
p[0][0] = 1 ;
p[0][ j ] 和 p[ i ][0]分别表示第一个字符串和第二个字符串为空串的情况。以p[ i ][0]为例,如果s1[ i ] = s[ i ] (注:这里s[ i ]为第三个字符串),则p[ i ][ 0 ] = 1, 反之为0.
如果p[ i-1 ][ j ] 与 p[ i ][ j-1 ] 同时为 0 ,则p[ i ][ j ] 赋值为0,即s1[ i ] 与 s2[ j ] 不能构成满足条件的s[ i + j];
如果( p[ i-1 ][ j ] == 0 && s1[ i ] == s[ i+j ] ) || (p[ i ][ j-1 ] == 0 && s1[ j ] == s[ i+j ] )
则 p[ i ][ j ] = 1;
原理就是假定第三个字符串s的前 i+j-1个字符都满足条件,如果最后一个字符也满足条件的话,那么就 yes
#include<iostream>#include<cstring>using namespace std;bool p[201][201];int main(){char s1[201],s2[201],s[401];int l1,l2,t;int i,j,u=0;scanf("%d",&t);while(u++<t){int tag = 1;scanf("%s%s%s",s1+1,s2+1,s+1);l1 = strlen(s1+1);l2 = strlen(s2+1);p[0][0] = 1;for(i=1;i<=l1;i++) /*初始化*/if(s1[i] == s[i]) p[i][0] = 1;else p[i][0] = 0;for(i=1;i<=l2;i++)if(s2[i] == s[i])p[0][i] = 1;else p[0][i] = 0;for(i=1;i<=l1;i++)for(j=1;j<=l2;j++)p[i][j] = ((p[i-1][j]&& s1[i] == s[i+j])||(p[i][j-1]&&s2[j]==s[i+j]));printf("Data set %d: ",u);printf(p[l1][l2]?"yes\n":"no\n");}return 0;}
- 1501 Zipper
- 1501 Zipper
- 1501 Zipper
- hdu 1501 Zipper
- hdu 1501 Zipper--LCS
- HDU-1501-Zipper
- Hdu 1501 Zipper
- hdu zipper 1501
- hdu 1501 Zipper
- hdoj 1501 Zipper
- HDU 1501 Zipper
- hdu 1501 Zipper
- hdu 1501 Zipper
- hdu(1501) Zipper
- hdu 1501 Zipper (DFS)
- HDU 1501 Zipper
- HDU 1501 Zipper
- HDU 1501 Zipper(DFS)
- 我的第一个Java程序
- 让Linux的启动信息从LCD和串口同时输出
- 单片机之支持多波特率
- 我的JavaScript日期库
- 简单枚举题,0到9全排列
- 1501 Zipper
- centos 网卡设置
- 堆、栈的区别
- Detailed Information on ODS and DSO object
- 使用WMSYS.WM_CONCAT实现行转列!
- C#Excel导入和导出
- PrintStream
- 条款2:尽量以const,enum,inline替换#define
- 【lizhi125】FindDupFile - 轻松查找与清理电脑上的重复文件、照片的绿色软件