HDU 2144(最长公共子序列+并查集)
今天训练赛的题目,从队切变成个人切的第一场,荣登倒一,很是难受...基础还是太差,以前都靠队友,现在都得自己补了!
这题就是对每两个DNA求最长公共连续子序列,然后如果相同部分长度超过一定比例,就将这两个串放到一个集合里.
注意点:
1.一开始一直都是TLE,然后发现是再求出了r1=find(i); r2 = find(j); 之后,还将 i 和 j 传进了merge函数,造成了两次调用并查集,于是就一直TLE...(低级错误)
2.注意是最长公共连续子序列,不是最长公共子序列,一直wa....发现了之后才A的
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;int dp[105][105];
int p[105];
char s[105][105];
double limit;
int n;int find(int x)
{return p[x]==x?x:p[x]=find(p[x]);
}int lcs(int a,int b)
{memset(dp,0,sizeof(dp));int len1 = strlen(s[a]);int len2 = strlen(s[b]);int maxx = 0;for(int i = 1;i < len1+1;i++){for(int j = 1;j < len2+1;j++){if(s[a][i-1] == s[b][j-1])dp[i][j] = dp[i-1][j-1]+1;elsedp[i][j] = 0;maxx = max(maxx,dp[i][j]);}}return maxx;
}int main()
{int tmp = 1;while(~scanf("%d%lf",&n,&limit)){for(int i = 0;i < n;i++)scanf("%s",s[i]);for(int i = 0;i < n;i++) p[i] = i;for(int i = 0;i < n;i++){for(int j = i+1;j < n;j++){int r1 = find(i),r2 = find(j);if(r1!=r2){int maxx = lcs(i,j);if( (double)maxx*100/(double)strlen(s[i]) > limit && (double)maxx*100/(double)strlen(s[j]) > limit ){p[r1]=r2;}}}}int ans = 0;for(int i = 0;i < n;i++){if(p[i] == i)ans++;}printf("Case %d:\n%d\n",tmp++,ans);}return 0;
}
HDU 2144(最长公共子序列+并查集)相关推荐
- hdu 1159(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 思路:dp[i][j]表示s1从0~i-1,s2从0~j-1的最长公共子序列: 递推方程为:dp ...
- HDU 1243 最长公共子序列 动态规划
HDU 1243 反恐训练营 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- HDU 1513 Palindrome(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 解题报告:给定一个长度为n的字符串,在这个字符串中插入最少的字符使得这个字符串成为回文串,求这个 ...
- 用java设计一个文件查重程序,输入两个文本文件,输出两个文本文件的重复率(最长公共子序列的应用)...
你可以使用java代码来设计一个文件查重程序.首先,你需要读取两个文本文件的内容,将它们存储在字符串变量中.然后,你可以使用最长公共子序列(LCS)算法来计算两个字符串的重复率. LCS算法的实现方法 ...
- 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence
动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...
- 模板 - 最长上升子序列与最长公共子序列
整理的算法模板合集: ACM模板 目录 1.最长上升子序列(LIS) 1.1树状数组优化O(nlogn)O(nlogn)O(nlogn) 2.最长公共子序列(LCS) 2.1转换成LIS优化O(nlo ...
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...
- LCS最长公共子序列和LIS最长上升子序列——例题剖析
一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...
- HDU1159(dp最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Problem Description A subsequ ...
- C++——《算法分析与设计》实验报告——最长公共子序列问题
实验名称: 最长公共子序列问题 实验地点: 实验目的: 理解动态规划算法的概念: 掌握动态规划算法的基本要素: 掌握设计动态规划算法的步骤: 通过应用范例学习动态规划算法的设计技巧与策略: 实验原理 ...
最新文章
- c#写的贪吃蛇小游戏
- angularjs 1.3 综合学习 (one way bind , ng-if , ng-switch , ng-messages, ng-form ,ng-model )
- linux ctime 时间戳,关于LINUX三种时间戳的详细说明(带实验)
- 剑指offer 链表中倒数第k个节点
- 面向对象的程序设计-模块二课程总结
- python通过api获取数据_在一次点击PythonRequests中从API获取所有数据
- printstream_Java PrintStream close()方法与示例
- c语言常用库函数使用方法,c语言常用库函数使用方法及用途
- Django添加MySQL数据库
- 解决不同浏览器下载excel文件中文名称乱码问题
- 一个亿,啪一下就没了!
- 启动sqlserver服务时,总是出现“系统错误(126),指定驱动程序无法加载
- 小米10开始抓取日志怎么关闭_日志MIUI 10 9.5.22 内测更新资讯
- 常用电子个人邮箱账号格式怎么写?
- matlab画图时特殊符号的输入
- iPhone手机调试工具Safari
- 2018年20个主要的大数据认证
- unity富文本使用:同一个文本框展示不同样式字体
- Oracle数据库查询被锁的表以及解锁表操作
- 如何防止用户打开浏览器开发者工具?
热门文章
- Vmware+Virtualbox+Ubuntu+debian+USB转串口+kermit
- SpringMVC实现ajax上传图片实时预览
- 服务器更新维护尚未全部完成,03月07日全部服务器更新维护公告
- OpenCV-图像处理(03、Mat对象)
- 装ubuntu_系统安装_win10下安装Ubuntu后,启动时无win10选项的解决办法。
- java加密不可逆,32位不可逆加密算法Java实现
- 【hdu2588】求[1-n]中和n的gcd大于m的数的个数(求欧拉函数值)
- hdoj1003+codeup2086:Max Sum最大连续子序列和(dp基础题+dp入门-----分治/遍历求和/dp)
- 增删改查oracle sql,oracle sql增删改查
- 射极跟随器实验报告数据处理_电压跟随器秘笈:运放构成电压跟随器的稳定性问题探讨...