poj - 2250 题解

news/2025/1/15 12:36:53/

题意:魔改版的LCS问题。序列是单词序列

解法:原版LCS的序列元素是数字,想办法把数字替换成单词就解决了

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<algorithm>
  4 #include<cstring>
  5 #include<string>
  6 using namespace std;
  7 string a[4000];
  8 string b[4000];
  9 int f[4000][4000];
 10 int la=0;
 11 int lb=0;
 12 string res[4000];
 13 bool get_res(int x,int y,int z)
 14 {
 15     if(z==f[la][lb]+1)
 16     {
 17         return true;
 18     }
 19     if(x*y==0)
 20     {
 21         return false;
 22     }
 23     if(a[x]==b[y])
 24     {
 25         res[z]=a[x];
 26         if(get_res(x-1,y-1,z+1))
 27         {
 28             return true;
 29         }
 30     }
 31     else
 32     {
 33         if(f[x][y]==f[x][y-1])
 34         {
 35             if(get_res(x,y-1,z))
 36             {
 37                 return true;
 38             }
 39         }
 40         if(f[x][y]==f[x-1][y])
 41         {
 42             if(get_res(x-1,y,z))
 43             {
 44                 return true;
 45             }
 46         }
 47     }
 48     return false;
 49 }
 50 int main()
 51 {
 52     string s;
 53     while(cin>>s)
 54     {
 55         bool flag=false;
 56         la=0;
 57         lb=0;
 58         a[++la]=s;
 59         while(true)
 60         {
 61             cin>>s;
 62             if(s=="#")
 63             {
 64                 if(flag)
 65                 {
 66                     break;
 67                 }
 68                 flag=true;
 69                 continue;
 70             }
 71             if(!flag)
 72             {
 73                 a[++la]=s;
 74             }
 75             else
 76             {
 77                 b[++lb]=s;
 78             }
 79         }
 80         memset(f,0,sizeof(f));
 81         for(int i=1;i<=la;i++)
 82         {
 83             for(int j=1;j<=lb;j++)
 84             {
 85                 if(a[i]==b[j])
 86                 {
 87                     f[i][j]=max(f[i][j],f[i-1][j-1]+1);
 88                 }
 89                 else
 90                 {
 91                     f[i][j]=max(f[i][j-1],f[i-1][j]);
 92                 }
 93             }
 94         }
 95         get_res(la,lb,1);
 96         for(int i=f[la][lb];i>=1;i--)
 97         {
 98             cout<<res[i]<<" ";
 99         }
100         cout<<endl;
101     }
102     
103     return 0;
104 }

 

转载于:https://www.cnblogs.com/shao0099876/p/7365096.html


http://www.ppmy.cn/news/142553.html

相关文章

loj2250/bzoj4784/洛谷P3687 仙人掌 DP

题目分析 如果原图不是一个仙人掌&#xff0c;答案就是0. 对于一个环&#xff0c;环上的两个点&#xff0c;若分别连着不是该环上的点&#xff0c;点集为 S 1 S_1 S1​和 S 2 S_2 S2​&#xff0c;那么 S 1 S_1 S1​和 S 2 S_2 S2​之间不能连边。所以我们可以去掉所有环上的…

2250. NOIP

2250. NOIP 题目描述 你知道New Orange Industry Palatable公司吗&#xff1f;这是老板Smart为了与苹果公司竞争而新开的一家橘子公司&#xff0c;它的业务是栽培美味的橘子并售卖&#xff0c;公司简称为NOIP。 NOIP公司新推出N1个橘子&#xff0c;每个橘子上都贴有一个标签&a…

Compromise (p2250)

第二次做&#xff0c;不过一开始没有看清会是多组数据&#xff0c;都搞得我都不知道哪错了。 这个和找公共子序列是一个道理&#xff08;把一个单词看成是一个字母&#xff09;。输出的路径进行记录&#xff0c;pre[][]&#xff0c;其中3代表是左上&#xff0c;2代表左边&…

巧用HashSet装载非重数据(洛谷P2250题题解,Java语言描述)

题目要求 P2550题目链接 分析 其实既然是Java来写&#xff0c;不用集合框架就是浪费啊&#xff01;&#xff01; 比较简单的思路是把中奖号码放进HashSet里&#xff0c;利用Hash来查找。 contains()就避免了又双叒叕疯狂遍历~~ 用一个数组记录中奖情况即可~~ AC代码&#xf…

【802.3】PCS 物理编码子层

Clause82:Physical Coding Sublayer (PCS) for 64B/66B, type 40GBASE-R and 100GBASE-R 文章目录 1. PCS 介绍1.1 概述1.2 功能框图2. PCS 详述2.1 发送方向2.1.1 64B/66B 编码2.1.2 Scrambler 加扰2.1.3 Block distribution 块分发2.1.4 Alignment marker insertion 插入对齐…

踩坑必看!事务隔离级别选择指南,避免数据库操作的陷阱!

大家好&#xff0c;我是你们的小米&#xff0c;在这个阳光明媚的日子里给大家带来一篇关于数据库事务隔离级别的分享。作为数据库领域的重要概念&#xff0c;事务隔离级别对于保障数据的一致性和稳定性至关重要。废话不多说&#xff0c;让我们一起深入了解吧&#xff01; 四个核…

浅谈RPC,gRPC和RESTful

RPC 远程过程调用&#xff08;Remote Procedure Call&#xff0c;RPC&#xff09;是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间&#xff08;通常为一个开放网络的一台计算机&#xff09;的子程序&#xff0c;而程序员就像调用本地程序一样&…

win10删除系统更新的安装包(清除C盘无用资源)

删除 C:\Windows\SoftwareDistribution\Download 下的全部文件&#xff0c;其为安装系统的安装包&#xff0c;一般没啥用&#xff0c;删了后大概可以省下500M空间。