//Gene Assembly
//DNA序列中最多gene序列
//用贪心法,先以基因头位置对基因排序,再用静态链存储、搜索

#include<iostream>
using namespace std;
#define MAX 1005
long st[MAX][2],output[MAX];  //st作为静态链表,output为输出gene的顺序而设

class Point
{
public:
    long x;
    long y;
    long No;
    bool operator<=(Point a)  //重载<=为了能在合并排序中使用
    {
        return (x<=a.x);
    }
};

//以下是合并排序
///

template <class Type>              
void Merge(Type c[],Type d[],long l, long m, long r)
{
    long p,k=l,i=l,j=m+1;
    while(i<=m && j<=r)
        if(c[i]<=c[j])  d[k++]=c[i++];
        else d[k++]=c[j++];

if(j>r)
        for(p=i;p<=m;p++)  d[k++]=c[p];
    else
        for(p=j;p<=r;p++)  d[k++]=c[p];
}

template <class Type>
void MergePass(Type x[],Type y[], long s, long n)
{
    long i=0,j;
    while(i<=n-2*s)
    {
        Merge(x, y, i, i+s-1,i+2*s-1);
        i+=2*s;
    }
    if(i+s<n)  Merge(x, y, i, i+s-1, n-1);
    else for(j=i;j<n;j++) y[j]=x[j];
}

template <class Type>
void MergeSort(Type a[],long n)
{
    Type *b=new Type [n];
    long s=1;
    while(s<n)
    {
        MergePass(a,b,s,n);
        s+=s;
        MergePass(b,a,s,n);
        s+=s;
    }
}

///

int main()
{
    long i,j,k,n,state,max;
    Point node[MAX];
    while(cin>>n && n!=0)
    {        
        node[0].x=0;
        node[0].y=0;
        node[0].No=0;
        k=1;
        for(i=1;i<=n;i++)
        {
            cin>>node[i].x>>node[i].y;
            node[i].No=k++;                     //输入时就先把gene的序号用No记录
        }
        MergeSort(node,n+1);
    
        //贪心法生成以静态链存储的树
        st[0][0]=-1;         //st[i][0]记录前一节点
        st[0][1]=0;          //st[i][1]记录层数
        for(i=1;i<=n;i++)
        {
            max=-1;
            for(j=0;j<i;j++)
            {
                if(node[i].x>node[j].y && max<st[j][1])
                {
                    state=j;
                    max=st[j][1];
                }
            }
            st[i][0]=state;
            st[i][1]=max+1;
        }

//找出最大层数的节点位置
        max=0;
        for(i=1;i<=n;i++)
        {
            if(st[i][1]>max)
            {
                max=st[i][1];
                state=i;
            }
        }
        //把最大链记录到output中
        j=0;
        while(state!=0)
        {
            output[j++]=node[state].No;
            state=st[state][0];
        }

for(i=j-1;i>=0;i--)
        {
            cout<<output[i];
            if(i!=0)
                cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}

转载于:https://www.cnblogs.com/VRS_technology/archive/2010/05/11/1732299.html

ZOJ 1076 Gene Assembly相关推荐

  1. 神牛笔记:吉林大学ACM总结(fennec)

    其实在北京比赛完的时候,我就想写了,不过还是早了点,直到上海比赛结束,大家的心中都不是太好受.郭老师有句话:你们这样做也是对的,不成功就成仁.让我的心也能安慰了不少. 我是从大一下学期开始接触ACM的 ...

  2. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  3. POJ ZOJ题目分类

    POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...

  4. POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)

    水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法:        (1)枚举 (1753,2965)       (2)贪心(13 ...

  5. ZOJ 题目分类,学校的一个巨巨做的。

     DP: 1011      NTA                    简单题 1013      Great Equipment        简单题 1024      Calendar ...

  6. poj题目详细分类及算法推荐题目

    DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  ...

  7. ACM POJ 题目分类(完整整理版本)

    DP: 1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题   ...

  8. PUK ACM题目分类

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  9. pku,zju题目分类

    哎呦喂,直接ctrl+A了.话说浙江大学的题还见过的呢.. 公告: [意见反馈][官方博客]   ural pku Zju 题目分类 收藏   感谢 mugu 的提供.... Ural Problem ...

  10. ICPC训练联盟2021寒假冬令营(7)_2021.01.26_笔记

    文章目录 试题链接 学习笔记 - C++STL.贪心算法 C++STL 迭代器 STL算法 关联式容器 贪心算法 介绍 使用贪心法能否得到最优解,是必须加以证明的. 体验贪心法内涵的实验范例 贪心法的 ...

最新文章

  1. javaweb学习总结(三十二)——JDBC学习入门
  2. Word 2003高级技巧之可爱的锚标记
  3. mysql 字符串转long_把数据库中的字符串格式转为long类型
  4. Python---实验八
  5. python pp模块_python常用模块
  6. 翼城中学2021高考成绩查询,临汾中考分数线预测2021
  7. php可以单干吗_拉伸膜包装机适合包装牛肉干吗?
  8. 【成长之路】【python】python基础2
  9. 软件开发计划_软件开发的流程是怎么样的?福州IT告诉你:这五点是你需要掌握的...
  10. 计算机ae软件的入门教学视频教程,新手如何入门剪辑?3分钟教会你快速上手(附赠教程)...
  11. 计算机组装维修设置还原点,怎样恢复出厂设置组装电脑
  12. 水溶性CdSe/ZnS量子点PL480nm--660nm(亲水配体包裹的核/壳型荧光纳米材料)
  13. java俄罗斯方块英文书籍_Java版俄罗斯方块
  14. i春秋第二届春秋欢乐赛登山者writeup
  15. spark-测试模式-在windows中连接虚拟机中cdh集群的hdfs和hive和linux单机模式
  16. 【后端】MySQL数据库体系(一)
  17. python简单体育竞技模拟_【python】羽毛球竞技模拟
  18. 【C语言】用函数实现求两个自然数的最大公约数
  19. 联想收购IBM谁赚了?
  20. mysql 游戏 知乎_入行游戏测试之Navicat For MySQL

热门文章

  1. 打字机游戏Ⅱ之手速pk
  2. iOS比较两张图的相似度
  3. PHP用户名和密码登陆验证代码
  4. YUM服务那些事---详解YUM服务
  5. 中国互联网关于阿里未来预测:这盘大期如何走
  6. 【鱼眼镜头5】[中央全向相机畸变模型]:统一相机模型,四阶多项式对统一相机模型进行建模
  7. Pytorch数据的读取与存储
  8. EF中CodeFirst中实体变化的处理方式
  9. 洛谷 P3397 地毯 【二维差分标记】
  10. mvc actionresult返回各种文件