今天训练赛的题目,从队切变成个人切的第一场,荣登倒一,很是难受...基础还是太差,以前都靠队友,现在都得自己补了!

这题就是对每两个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(最长公共子序列+并查集)相关推荐

  1. hdu 1159(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 思路:dp[i][j]表示s1从0~i-1,s2从0~j-1的最长公共子序列: 递推方程为:dp ...

  2. HDU 1243 最长公共子序列 动态规划

    HDU 1243 反恐训练营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  3. HDU 1513 Palindrome(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 解题报告:给定一个长度为n的字符串,在这个字符串中插入最少的字符使得这个字符串成为回文串,求这个 ...

  4. 用java设计一个文件查重程序,输入两个文本文件,输出两个文本文件的重复率(最长公共子序列的应用)...

    你可以使用java代码来设计一个文件查重程序.首先,你需要读取两个文本文件的内容,将它们存储在字符串变量中.然后,你可以使用最长公共子序列(LCS)算法来计算两个字符串的重复率. LCS算法的实现方法 ...

  5. 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence

    动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...

  6. 模板 - 最长上升子序列与最长公共子序列

    整理的算法模板合集: ACM模板 目录 1.最长上升子序列(LIS) 1.1树状数组优化O(nlogn)O(nlogn)O(nlogn) 2.最长公共子序列(LCS) 2.1转换成LIS优化O(nlo ...

  7. 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)

    目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...

  8. LCS最长公共子序列和LIS最长上升子序列——例题剖析

    一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...

  9. HDU1159(dp最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Problem Description A subsequ ...

  10. C++——《算法分析与设计》实验报告——最长公共子序列问题

    实验名称: 最长公共子序列问题 实验地点: 实验目的: 理解动态规划算法的概念: 掌握动态规划算法的基本要素: 掌握设计动态规划算法的步骤: 通过应用范例学习动态规划算法的设计技巧与策略: 实验原理 ...

最新文章

  1. c#写的贪吃蛇小游戏
  2. angularjs 1.3 综合学习 (one way bind , ng-if , ng-switch , ng-messages, ng-form ,ng-model )
  3. linux ctime 时间戳,关于LINUX三种时间戳的详细说明(带实验)
  4. 剑指offer 链表中倒数第k个节点
  5. 面向对象的程序设计-模块二课程总结
  6. python通过api获取数据_在一次点击PythonRequests中从API获取所有数据
  7. printstream_Java PrintStream close()方法与示例
  8. c语言常用库函数使用方法,c语言常用库函数使用方法及用途
  9. Django添加MySQL数据库
  10. 解决不同浏览器下载excel文件中文名称乱码问题
  11. 一个亿,啪一下就没了!
  12. 启动sqlserver服务时,总是出现“系统错误(126),指定驱动程序无法加载
  13. 小米10开始抓取日志怎么关闭_日志MIUI 10 9.5.22 内测更新资讯
  14. 常用电子个人邮箱账号格式怎么写?
  15. matlab画图时特殊符号的输入
  16. iPhone手机调试工具Safari
  17. 2018年20个主要的大数据认证
  18. unity富文本使用:同一个文本框展示不同样式字体
  19. Oracle数据库查询被锁的表以及解锁表操作
  20. 如何防止用户打开浏览器开发者工具?

热门文章

  1. Vmware+Virtualbox+Ubuntu+debian+USB转串口+kermit
  2. SpringMVC实现ajax上传图片实时预览
  3. 服务器更新维护尚未全部完成,03月07日全部服务器更新维护公告
  4. OpenCV-图像处理(03、Mat对象)
  5. 装ubuntu_系统安装_win10下安装Ubuntu后,启动时无win10选项的解决办法。
  6. java加密不可逆,32位不可逆加密算法Java实现
  7. 【hdu2588】求[1-n]中和n的gcd大于m的数的个数(求欧拉函数值)
  8. hdoj1003+codeup2086:Max Sum最大连续子序列和(dp基础题+dp入门-----分治/遍历求和/dp)
  9. 增删改查oracle sql,oracle sql增删改查
  10. 射极跟随器实验报告数据处理_电压跟随器秘笈:运放构成电压跟随器的稳定性问题探讨...