POJ 2250 Compromise (UVA 531)

news/2025/2/12 15:21:03/

LCS问题。基金会DP。

我很伤心WA非常多。就在LCS问题,需要记录什么路。


反正自己的纪录path错误,最后,就容易上当。


没有优化,二维阵列,递归打印,cin.eof() 来识别 end of file 标识。

至于单词用map 映射的。

事实上也用不着,直接二维string或者 二维char 然后strcmp 也行。


Special Judge

交 UVA 531 奇怪的PE了。

。。 然后改成 flag 标记 输出 空格。最终都AC了。


#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<bitset>
#include<vector>
#include<cmath>#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define PI 3.141592654
#define CLR(a,b) memset(a,b,sizeof(a))
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define FOR_(i,a,b) for(int i=a;i>=b;i--)
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define sf scanf
#define pf printf
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
#define acfun std::ios::sync_with_stdio(false)#define SIZE 1000 +1
using namespace std;int a[SIZE],b[SIZE];
int dp[SIZE][SIZE];
int path[SIZE][SIZE];
map<string,int>word;
map<int,string>exword;
bool flag;
void print(int i,int j)
{if(i>0&&j>0){if(path[i][j]==0){print(i-1,j-1);if(flag)cout<<" ";elseflag=1;cout<<exword[a[i-1]];}else if(path[i][j]==1)print(i-1,j);else if(path[i][j]==-1)print(i,j-1);}
}
int main()
{acfun;while(1){string tmp;word.clear();int cot=1;int la=0,lb=0;flag=0;while(1){cin>>tmp;if(cin.eof())return 0;if(tmp=="#")break;if(word[tmp]==0){word[tmp]=cot++;exword[cot-1]=tmp;}a[la++]=word[tmp];}while(1){cin>>tmp;if(tmp=="#")break;if(word[tmp]==0){word[tmp]=cot++;exword[cot-1]=tmp;}b[lb++]=word[tmp];}FOR(i,0,la)FOR(j,0,lb){if(a[i]==b[j]){dp[i+1][j+1]=dp[i][j]+1;path[i+1][j+1]=0;}else{if(dp[i+1][j]>=dp[i][j+1]){dp[i+1][j+1]=dp[i+1][j];path[i+1][j+1]=-1;}else{dp[i+1][j+1]=dp[i][j+1];path[i+1][j+1]=1;}}}//cout<<dp[la][lb]<<endl;print(la,lb);cout<<endl;}
}





版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/lcchuguo/p/4685023.html


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

相关文章

poj 2250 Compromise(区间dp)

题目链接&#xff1a;http://poj.org/problem?id2250 思路分析&#xff1a;最长公共子序列问题的变形&#xff0c;只是把字符变成了字符串&#xff0c;按照最长公共子序列的思路即可以求解。 代码如下&#xff1a; #include <stdio.h> #include <string.h>#defin…

Poj-2250-Compromise

题意是找两篇文章中的最长子单词序列 能得出个数&#xff0c;但不知如何输出&#xff0c;找不到路径 看了别人的dfs&#xff0c;有所领悟&#xff1a; 若输入s1&#xff1a;ab,bd,fk,ce,ak,bt,cv s2: ab,fk,ce,tt,ak,bt,深搜路径数字涂红dp棋盘如下&#xff1a;    ab…

洛谷—— P1238 走迷宫

https://www.luogu.org/problem/show?pid1238 题目描述 有一个m*n格的迷宫(表示有m行、n列)&#xff0c;其中有可走的也有不可走的&#xff0c;如果用1表示可以走&#xff0c;0表示不可以走&#xff0c;文件读入这m*n个数据和起始点、结束点(起始点和结束点都是用两个数据来描…

题目 2250: 蓝桥杯算法提高-秘密行动

题目 小D接到一项任务&#xff0c;要求他爬到一座n层大厦的顶端与神秘人物会面。这座大厦有一个神奇的特点&#xff0c;每层的高度都不一样&#xff0c;同时&#xff0c;小D也拥有一项特殊能力&#xff0c;可以一次向上跳跃一层或两层&#xff0c;但是这项能力无法连续使用。已…

【DP】poj2250

经典的lcs问题&#xff0c;然而却是得到了很多启发&#xff0c;当时并没有想到如果s[i]ss[j]就可以直接用dp[i-1][j-1]1转移&#xff0c;仔细想了一下&#xff0c;dp[i][j-1]和dp[i-1][j]一定是<dp[i-1][j-1]1的。如果i在之前的状态中被使用过&#xff0c;那么dp[i][j-1]dp[…

【LOJ2250】「ZJOI2017」仙人掌

【题目链接】 点击打开链接 【思路要点】 考虑给定的图为大小为 N 1 N1 N1 的点的菊花图的情况&#xff0c;记方案数为 d p N dp_N dpN​ &#xff0c;考虑最后一个儿子是否连边&#xff0c;则有转移 d p i d p i − 1 ( i − 1 ) d p i − 2 dp_idp_{i-1}(i-1)dp_{i-2} …

2023年的六一儿童节,愿我们永远热泪盈眶,永远保持童心,致我们终将逝去的青春!

六一儿童节&#xff0c;是一个属于孩子们的节日。在这一天&#xff0c;孩子们可以尽情地玩耍、享受快乐。然而&#xff0c;对于我们这些已经长大的人来说&#xff0c;六一儿童节却意味着一种回忆&#xff0c;一种怀念&#xff0c;一种青春的逝去。 小时候&#xff0c;我们总是…

(纪中)2250. NOIP

(File IO): input:noip.in output:noip.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto ProblemSet 题目描述 你知道 N e w O r a n g e I n d u s t r y P a l a t a b l e New Orange Industry Palatable NewOrangeIndustryPalatable公司吗&#xff1f;这是老板 S…