题意:

给三个字符串,判断前两个在相对顺序不变的情况下是否可以组成第三个字符串。

思路:

先说屌丝:

dp[i][j]代表1串的前i个和2串的前j个字符在3串的前i+j个字符中最多能够组合出几个字符。

然后状态转移是:

如果stra[i]==strc[i+j]则,dp[i][j]=max(dp[i][j],dp[i-1][j]+1)

同样的若strb[i]==strc[i+j]则,dp[i][j]=max(dp[i][j],dp[i][j-1]+1)

最后判断dp[lena][lenb]是否等于lena+lenb

再说大神思路:

大神直接把dp定义成bool型,初始化dp[0][0]=1;

然后dp[i]][j]=dp[i-1][j]&&tmpa[i]==tmpc[i+j]||dp[i][j-1]&&tmpb[j]==tmpc[i+j]

屌丝代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[][];
int main()
{
int t;
scanf("%d",&t);
char tmpa[],tmpb[],tmpc[];
for(int tt=; tt<=t; tt++)
{
memset(dp,,sizeof(dp));
scanf("%s%s%s",tmpa+,tmpb+,tmpc+);
int lena=strlen(tmpa+);
int lenb=strlen(tmpb+);
int lenc=strlen(tmpc+);
if(lena+lenb!=lenc)
{
printf("Data set %d: no\n",tt);
}
else
{
for(int i=; i<=lena; i++)
{
for(int j=; j<=lenb; j++)
{
if(i!=)
{
if(tmpa[i]==tmpc[i+j])
{
dp[i][j]=dp[i-][j]+;
}
else
{
dp[i][j]=dp[i-][j];
}
}
if(j!=)
{
if(tmpb[j]==tmpc[i+j])
{
dp[i][j]=max(dp[i][j],dp[i][j-]+);
}
else
{
dp[i][j]=max(dp[i][j],dp[i][j-]);
}
}
}
}
/*for(int i=0;i<=lena;i++)
{
for(int j=0;j<=lenb;j++)
{
printf("%d ",dp[i][j]);
}
puts("");
}*/
if(dp[lena][lenb]==lenc)
{
printf("Data set %d: yes\n",tt);
}
else
{
printf("Data set %d: no\n",tt);
}
}
}
}

POJ 2192 【DP】的更多相关文章

  1. POJ 3230 【DP】

    题意: 某货旅行,在n个城市呆m天. 给出从第i个城市到第j个城市的路费,或者留在某个城市的生活费. 给出在第i天在第j个城市的收益. 可以在城市之间任意穿梭逗留没有其他特殊要求. 求收益最大是多少. ...

  2. POJ 2346 【DP】

    题意: 给一个正的不大于10的偶数n,求n个数字组成的数字串前n/2位和后n/2位的和相等的个数. 思路: dp[i][j]由i位数组成的和为j的数字串的个数. dp[i][j]+=dp[i-1][j ...

  3. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  4. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  5. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  6. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  7. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  8. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  9. POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】

    POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...

随机推荐

  1. windows.old文件删除

    在安装完新系统后,会发现C盘下有个windows.old文件夹,大约有个10多G,里面都是对之前系统的一些备份,用于对之前系统恢复时使用,一般一个月后会自动清理,若觉得不会再对系统进行老版本恢复时,又 ...

  2. c# sqlserver连接字符串

    odbc: string cnnstring = @"Driver={SQL Server Native Client 11.0};Initial Catalog = sxquadb;ser ...

  3. SAP成都研究院安德鲁:自己动手开发一个Chrome Extension

    各位好,我叫何金鑫(He Andrew), 团队同事亲切地称呼在下为安德鲁.如果你在附近找到wifi热点名为 「安德鲁森面包房5g」,可能是我就在附近,我们可以去喝杯咖啡,聊聊最近有趣的东西. 鄙人现 ...

  4. 7-Java-C(冰雹数)

    题目描述: 任意给定一个正整数N, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复. 通过观察发现,这个数字会一会儿上升到很高, 一会 ...

  5. uva10735 Euler Circuit

    题外话:很多混合图问题可以转化为有向图问题(将无向边拆为两条有向边) 本题不行,因为只能经过一次 这种问题能想到网络流.. 复习欧拉回路:入度==出度 和uva1380有点相似,要先给无向边定向.原图 ...

  6. String系列之replaceAll方法替换.

    直接使用String类的replaceall方法的第一个参数并不是简单的字符串,而是一个正则表达式.在正则表达式中,英文点号(.)表示任意字符,所以你原先的写法会把所有字符都替换成空白. 转义使用所以 ...

  7. vscode F12 不能用,原来是快捷键冲突了。

    vscode F12 不能用,原来是快捷键冲突了.

  8. 三大框架所使用的UI框架

  9. PHP14 动态图像处理

    学习要点 如何使用PHP中的GD库 设计验证码类 PHP图片处理 设计图像图处理类 如何使用PHP中的GD库 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站 ...

  10. Spring Data Redis入门示例:字符串操作(六)

    Spring Data Redis对字符串的操作,封装在了ValueOperations和BoundValueOperations中,在集成好了SPD之后,在需要的地方引入: // 注入模板操作实例 ...