ACM POJ 2192 Zipper
来源:互联网 发布:java工程师是做什么的 编辑:程序博客网 时间:2024/06/07 03:24
题目大意:输入字符串a,b,c 要求判断c是否有a,b中的个字符保持原有顺序组合而成。
算法思想:
DP
用dp[i][j]表示a的前0~i-1共i个字符和b的前0~j-1共j个字符是否构成c[i+j-1].
状态转换方程:
if(i>=1&&c[i+j-1]==a[i-1])
dp[i][j]=dp[i][j]||dp[i-1][j]
if(j>=1&&c[i+j-1]==b[j-1])
dp[i][j]=dp[i][j]||dp[i][j-1]
代码如下:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ char a[250]; char b[250]; char c[550]; scanf("%s%s%s",a,b,c); int la=strlen(a); int lb=strlen(b); int lc=strlen(c); int dp[250][250]; memset(dp,0,sizeof(dp)); dp[0][0]=1; if(a[0]==c[0])dp[1][0]=1; if(b[0]==c[0])dp[0][1]=1; for(int j=0;j<=la;j++){ for(int k=0;k<=lb;k++){ if(k>=1&&c[k+j-1]==b[k-1]) dp[j][k]=dp[j][k]||dp[j][k-1]; if(j>=1&&c[k+j-1]==a[j-1]) dp[j][k]=dp[j][k]||dp[j-1][k]; } } if(dp[la][lb])cout<<"Data set "<<i<<": yes"<<endl; else cout<<"Data set "<<i<<": no"<<endl; } return 0;}
0 0
- ACM POJ 2192 Zipper
- POJ 2192 Zipper
- poj 2192 Zipper
- poj 2192 Zipper DP
- Poj 2192 Zipper
- DFS poj 2192 zipper
- poj 2192 zipper
- POJ-2192-Zipper
- poj 2192 Zipper
- POJ 2192 Zipper
- POJ 2192 Zipper
- poj 2192 zipper
- poj 2192 Zipper
- POJ 2192 Zipper
- POJ 2192 Zipper
- POJ---2192-Zipper
- POJ-2192 Zipper
- POJ 2192 Zipper
- css课堂记录
- 上机练习项目一
- Nagios短信猫报警配置
- String相关面试题
- 输入3个整数,输出其中的最大值
- ACM POJ 2192 Zipper
- 等自己35岁的时候再看看自己完成了哪些~~
- 3.实现串口功能及消息邮箱
- 将一个二维数组合并成一个一维数组
- 谷歌公司的招聘原则--“九要”和“九拒”
- Android中 int 和 String 互相转换的多种方法
- Windows 7 with SP1中英文原版MSDN下载汇总
- 黑马程序员_iOS开发C语言基础之枚举类型和数据类型总结
- Ternarian Weights(进制转换)