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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hdu 1560 DNA sequence(迭代加深搜索)

發(fā)布時(shí)間:2025/3/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 1560 DNA sequence(迭代加深搜索) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

題意:從n個(gè)串中找出一個(gè)最短的公共串,,該公共串對(duì)于n個(gè)字符串不要求連續(xù),即只要保持相對(duì)順序就好。

解題思路:

根據(jù)數(shù)據(jù)量這題可以用搜索,通過這題學(xué)到了迭代加深搜索。

我們可以去搜索最后滿足條件的串,但這題的關(guān)鍵是如何去找匹配,我們可以定義一個(gè)數(shù)組len[i],表示搜到當(dāng)前這個(gè)串時(shí),第i個(gè)串可以匹配到的位置。這里想通了,剩下的就是簡(jiǎn)單的搜索了。

#include<iostream> #include<cstdio> #include<cstring> using namespace std;int n,ans,deep,size[10]; char str[10][10]; //記錄n個(gè)字符串 char DNA[4]={'A','C','G','T'}; //一共四種可能 void dfs(int cnt,int len[]) {if(cnt > deep) return; //大于限制的深度,不用往下搜索 int tmp = 0; 預(yù)計(jì)還要匹配的字符串的最大長(zhǎng)度 for(int i = 0; i < n; i++){if(size[i] - len[i] > tmp)tmp = size[i] - len[i];}if(tmp == 0) //條件全部滿足即為最優(yōu)解 {ans = cnt;return;}if(cnt + tmp > deep) return;for(int i = 0; i < 4; i++){int pos[10],flag = 0;for(int j = 0; j < n; j++){if(str[j][len[j]] == DNA[i]){flag = 1;pos[j] = len[j] + 1;}else pos[j] = len[j];}if(flag) dfs(cnt+1,pos);if(ans != -1) break;} }int main() {int t;scanf("%d",&t);while(t--){scanf("%d",&n);deep = 0;for(int i = 0; i < n; i++){scanf("%s",str[i]);size[i] = strlen(str[i]);if(size[i] > deep)deep = size[i];}ans = -1;int pos[10] = {0};//記錄n個(gè)字符串目前匹配到的位置 while(true){dfs(0,pos);if(ans != -1) break;deep++;}printf("%d\n",ans);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的hdu 1560 DNA sequence(迭代加深搜索)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。