ZOJ Problem Set - 1076 Gene Assembly
2013-07-09 18:04
302 查看
ZOJ Problem Set - 1076
Gene Assembly
Time Limit: 2 Seconds
Memory Limit: 65536 KB
Statement of the Problem
With the large amount of genomic DNA sequence data being made available, it is becoming more important to find genes (parts of the genomic DNA which are responsible for the synthesis of proteins) in these sequences. It is known that for eukaryotes
(in contrast to prokaryotes) the process is more complicated, because of the presence of junk DNA that interrupts the coding region of genes in the genomic sequence. That is, a gene is composed by several pieces (called exons) of coding regions. It is
known that the order of the exons is maintained in the protein synthesis process, but the number of exons and their lengths can be arbitrary.
Most gene finding algorithms have two steps: in the first they search for possible exons; in the second they try to assemble a largest possible gene, by finding a chain with the largest possible number of exons. This chain must obey the order in which
the exons appear in the genomic sequence. We say that exon i appears before exon j if the end of i precedes the beginning of j.
The objective of this problem is, given a set of possible exons, to find the chain with the largest possible number of exons that cound be assembled to generate a gene.
Input Format
Several input instances are given. Each instance begins with the number 0 < n < 1000 of possible exons in the sequence. Then, each of the next n lines contains a pair of integer numbers that represent the position in which the exon starts and ends
in the genomic sequence. You can suppose that the genomic sequence has at most 50000 basis. The input ends with a line with a single 0.
Output Format
For each input instance your program should print in one line the chain with the largest possible number of exons, by enumerating the exons in the chain. If there is more than one chain with the same number of exons, your program can print anyone of
them.
Sample Input
6
340 500
220 470
100 300
880 943
525 556
612 776
3
705 773
124 337
453 665
0
Sample Output
3 1 5 6 4
2 3 1
其实用贪心也可以做不过想练练动规就动规好了
AC代码:
Gene Assembly
Time Limit: 2 Seconds
Memory Limit: 65536 KB
Statement of the Problem
With the large amount of genomic DNA sequence data being made available, it is becoming more important to find genes (parts of the genomic DNA which are responsible for the synthesis of proteins) in these sequences. It is known that for eukaryotes
(in contrast to prokaryotes) the process is more complicated, because of the presence of junk DNA that interrupts the coding region of genes in the genomic sequence. That is, a gene is composed by several pieces (called exons) of coding regions. It is
known that the order of the exons is maintained in the protein synthesis process, but the number of exons and their lengths can be arbitrary.
Most gene finding algorithms have two steps: in the first they search for possible exons; in the second they try to assemble a largest possible gene, by finding a chain with the largest possible number of exons. This chain must obey the order in which
the exons appear in the genomic sequence. We say that exon i appears before exon j if the end of i precedes the beginning of j.
The objective of this problem is, given a set of possible exons, to find the chain with the largest possible number of exons that cound be assembled to generate a gene.
Input Format
Several input instances are given. Each instance begins with the number 0 < n < 1000 of possible exons in the sequence. Then, each of the next n lines contains a pair of integer numbers that represent the position in which the exon starts and ends
in the genomic sequence. You can suppose that the genomic sequence has at most 50000 basis. The input ends with a line with a single 0.
Output Format
For each input instance your program should print in one line the chain with the largest possible number of exons, by enumerating the exons in the chain. If there is more than one chain with the same number of exons, your program can print anyone of
them.
Sample Input
6
340 500
220 470
100 300
880 943
525 556
612 776
3
705 773
124 337
453 665
0
Sample Output
3 1 5 6 4
2 3 1
其实用贪心也可以做不过想练练动规就动规好了
AC代码:
#include<iostream> #include<algorithm> #include<string.h> using namespace std; struct Gene{ int start,end,id; }; bool cmp(Gene a,Gene b) { if(a.start!=b.start) { return a.start<b.start; } else return a.end<b.end; } void print(int *path,Gene*g,int start,int lay) { if(start==-1)return; print(path,g,path[start],lay+1); cout<<g[start].id; if(lay!=0)cout<<' '; else cout<<endl; } int main() { int n; while(cin>>n&&n!=0) { Gene g[1001]; int path[1001]; int count[1001]; memset(path,-1,sizeof(path)); memset(count,0,sizeof(count)); for(int i=0;i<n;i++) { cin>>g[i].start>>g[i].end; g[i].id=i+1; } sort(g,g+n,cmp); count[0]=1; for(int i=1;i<n;i++) { for(int j=0;j<i;j++) { if(g[j].end<g[i].start) { if(count[i]<count[j]) { count[i]=count[j]; path[i]=j; } } } count[i]++; } int max=0;int flag; for(int i=0;i<n;i++) if(max<count[i]) { max=count[i]; flag=i; } //cout<<max<<endl; print(path,g,flag,0); } }
相关文章推荐
- ZOJ Problem Set - 1858 Soundex
- ZOJ Problem Set - 1314 Uniform Generator(GCD)
- ZOJ Problem Set - 1188 DNA Sorting
- ZOJ Problem Set - 2723 Semi-Prime(ac,但有一点想不通)
- ZOJ Problem Set - 1093Monkey and Banana
- ZOJ Problem Set - 2176 Speed Limit
- ZOJ Problem Set - 1315 Excuses, Excuses!(字符串处理的好题)
- ZOJ Problem Set - 3822
- ZOJ Problem Set - 2972
- ZOJ Problem Set - 2850 Beautiful Meadow
- ZOJ Problem Set - 1831 Substitution Cypher
- ZOJ Problem Set - 1655
- ZOJ Problem Set - 1456
- ZOJ Problem Set - 1115 Digital Roots
- ZOJ Problem Set - 1151 Word Reversal
- ZOJ Problem Set - 2850 Beautiful Meadow
- ZOJ Problem Set - 3657The Little Girl who Picks Mushrooms
- ZOJ Problem Set - 2014 Piggy-Bank【完全背包】
- ZOJ Problem Set - 3229 Shoot the Bullet 【有上下界网络流+流量输出】
- ZOJ Problem Set - 2109 FatMouse' Trade