日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 1560 DNA sequence(IDA*)

發布時間:2024/8/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 1560 DNA sequence(IDA*) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1560

DNA sequence

Time Limit: 15000/5000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1505????Accepted Submission(s): 730

Problem Description The twenty-first century is a biology-technology developing century. We know that a gene is made of DNA. The nucleotide bases from which DNA is built are A(adenine), C(cytosine), G(guanine), and T(thymine). Finding the longest common subsequence between DNA/Protein sequences is one of the basic problems in modern computational molecular biology. But this problem is a little different. Given several DNA sequences, you are asked to make a shortest sequence from them so that each of the given sequence is the subsequence of it.

For example, given "ACGT","ATGC","CGTT" and "CAGT", you can make a sequence in the following way. It is the shortest but may be not the only one.


Input The first line is the test case number t. Then t test cases follow. In each case, the first line is an integer n ( 1<=n<=8 ) represents number of the DNA sequences. The following k lines contain the k sequences, one per line. Assuming that the length of any sequence is between 1 and 5.
Output For each test case, print a line containing the length of the shortest sequence that can be made from these sequences.
Sample Input 1 4 ACGT ATGC CGTT CAGT
Sample Output 8
Author LL
Source HDU 2006-12 Programming Contest
Recommend LL???|???We have carefully selected several similar problems for you:??1667?1043?1813?1226?1401?
題目大意:給n個序列,找到一個包含所有給出序列的最短長度并輸出。 解題思路:采用gei_h()得到當前狀態下最長的未匹配的長度。在進行深度搜索。每個串的長度不超過5,最多只有8個序列,所以IDA不超過40次。
詳見代碼。 #include <iostream> #include <cstdio> #include <cstring> #include <queue>using namespace std;int n; char ch[10][10]; int len[10],want; char dir[10]= {'A','C','G','T'}; int wei[10];//記錄第i個序列正在使用第幾個位置int get_h() {int t=0;for (int i=1; i<=n; i++){t=max(t,len[i]-wei[i]);//得到當前情況下最長的未被匹配的長度}return t; }int IDA(int dep) {if(dep+get_h()>want)//當前長度+估測的長度比我想要的還大的話,就不必繼續搜索{//cout<<get_h()<<endl;return 0;}if(dep==want)return 1;int tmp[10];for (int i=0; i<4; i++){int flag=0;memcpy(tmp,wei,sizeof(wei));//先存一下for (int j=1; j<=n; j++){if (ch[j][wei[j]]==dir[i])//當前的這一位符合{flag=1;//標記當前狀態可以wei[j]++;}}if (flag){if(IDA(dep+1))//如果可以就繼續搜索return 1;memcpy(wei,tmp,sizeof(tmp));//還原回來}}return 0; }int main() {int T;scanf("%d",&T);while (T--){int Max=0;scanf("%d",&n);for (int i=1; i<=n; i++){scanf("%s",ch[i]);len[i]=strlen(ch[i]);if (len[i]>Max)Max=len[i];}memset(wei,0,sizeof(wei));want=Max;//從最長序列開始查找while (1){if (IDA(0)){break;}want++;}printf ("%d\n",want);}return 0; }




總結

以上是生活随笔為你收集整理的hdu 1560 DNA sequence(IDA*)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。