亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

HDOJ(HDU).1258 Sum It Up (DFS)

2019-11-10 19:31:08
字體:
來源:轉載
供稿:網友

HDOJ(HDU).1258 Sum It Up (DFS) [從零開始DFS(6)]

點我挑戰題目

從零開始DFS HDOJ.1342 Lotto [從零開始DFS(0)] — DFS思想與框架/雙重DFS HDOJ.1010 Tempter of the Bone [從零開始DFS(1)] —DFS四向搜索/奇偶剪枝 HDOJ(HDU).1015 Safecracker [從零開始DFS(2)] —DFS四向搜索變種 HDOJ(HDU).1016 PRime Ring Problem (DFS) [從零開始DFS(3)] —小結:做DFS題目的關注點 HDOJ(HDU).1035 Robot Motion [從零開始DFS(4)]—DFS題目練習 HDOJ(HDU).1241 Oil Deposits(DFS) [從零開始DFS(5)] —DFS八向搜索/雙重for循環遍歷 HDOJ(HDU).1258 Sum It Up (DFS) [從零開始DFS(6)] —DFS雙重搜索/去重技巧 HDOJ(HDU).1045 Fire Net [從零開始DFS(7)]—DFS練習/check函數的思想

題意分析

每組數據給出要湊出的目標數字num和數字個數n,然后依次給出n個數字。要求從n個數字中選出若干個數字,是的數字之和為nun。重復的組合只輸出一次。

和之前做過的選數字的題目類似,也可以采用DFS的思想來做。這道題與 HDOJ.1342 Lotto [從零開始DFS(0)]及其的相似:每個數字有2種選擇,選/不選,只要我選擇的這些數字的和為num就行了。但是不難想到會有重復的組合出現,例如給出的樣例3:

400 12 50 50 50 50 50 50 25 25 25 25 25 25

要求從12個數字中選擇出若干數字使得總和為400,我們可以發現選擇6個50和4個25即可。那么若按照HDOJ.1342的思想,選/不選,問題就會出現:要從6個25中選4個25,會有C(6,4)中情況,也就是說最后的結果會多出11組相同的解。這顯然不符合題意。 問題的關鍵在于如何去重,最先想到也是最容易想到的就是把每組解保存下來,如果遇到重復的只輸出一組即可。很明顯這種方法實現起來耗費的工程量是巨大的,非常麻煩?;氐紻FS的核心:遞歸。我們對于遞歸做出一些約束,當滿足一定條件時,下面搜索的解會造成重復,就終止遞歸。這樣得到的解,均是非重復的。關鍵就是找到這樣的條件,或者說為遞歸創造這樣的條件。

上代碼。

代碼總覽

/* Title:HDOJ.1258 Author:pengwill Date:2017-2-8*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int num,n,pos;int a[15],b[15];bool judge = false;void output(int depth){ for(int i =0 ;i< depth; ++i) if(!i) printf("%d",b[i]); else printf("+%d",b[i]); printf("/n");}void dfs(int depth,int sum,int pos){ if(sum == num) {judge = true;output(depth); return;} if(sum>num) return;// 超出了 終止遞歸 if(pos>=n) return; //選擇的數的位置超出數據范圍 b[depth] = a[pos]; dfs(depth+1,sum+a[pos],pos+1); while(pos+1<n&&a[pos] == a[pos+1]) pos++;//關鍵 dfs(depth,sum,pos+1);}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d%d",&num,&n) && num){ printf("Sums of %d:/n",num); for(int i = 0; i<n; ++i) scanf("%d",&a[i]); judge = false; dfs(0,0,0); //output if(judge == false) printf("NONE/n"); } return 0;}

還是按照 HDOJ.1342 Lotto [從零開始DFS(0)]中寫到的雙重DFS的辦法(即選/不選的思想),解決此題。 遞歸邊界:當數字的和為num時,或者和超出了num,或者要選擇的數字位置超出了n,終止搜索。 關鍵是下面這幾句。

dfs(depth+1,sum+a[pos],pos+1); while(pos+1<n&&a[pos] == a[pos+1]) pos++;//關鍵 dfs(depth,sum,pos+1);

首先是默認選擇了pos這個位置的數字然后進行dfs。下面一個while循環表示如果下一個待選數字和本位置的待選數字一樣的話,就跳過,一直跳到下一個待選數字不同的位置。如樣例3:

400 12 50 50 50 50 50 50 25 25 25 25 25 25

就會從第一個50一直跳到最后一個50(下一個數字是25)。貌似看起來得不到正確結果,當然在第一層dfs不選擇50的情況是沒有正確解的。不放我們看一下下一層dfs,即選擇了第一個50后的dfs。

進入第二層dfs依舊會有2種選擇,要么選擇第二個50,要么后續的50一個都不選。當然這時候一個50都不選的情況也是沒有正確解的,繼續看第三層。

進入第三層dfs還是會有2種選擇,要么選擇第三個50,要么后續的50一個都不選。但讓后續50一個都不選的情況也沒有正確解。

…………

依次類推,不難發現,這條while語句的作用就是:營造單一的選1個50,選2個50,選3個50這樣的情況,從而避免了重復解的出現。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
55夜色66夜色国产精品视频| 久久精品99久久久久久久久| 国模视频一区二区三区| 日韩中文字幕网站| 69av视频在线播放| 国产suv精品一区二区三区88区| 欧美日韩国产中文精品字幕自在自线| 国产美女久久久| 富二代精品短视频| 日韩av在线网| 奇门遁甲1982国语版免费观看高清| 日韩欧美在线中文字幕| 欧美在线观看一区二区三区| 日韩免费看的电影电视剧大全| 日韩成人小视频| 久久精彩免费视频| 久久久精品免费| 欧美香蕉大胸在线视频观看| 亚洲理论在线a中文字幕| 国产精品久久久久av| 国产一区二区丝袜| 日韩在线观看免费| 欧美天天综合色影久久精品| 国产精品流白浆视频| 久久精品成人动漫| 96精品久久久久中文字幕| 精品国产美女在线| 伊人激情综合网| 亚洲欧美视频在线| 色偷偷偷综合中文字幕;dd| 亚洲精品www久久久久久广东| 欧美日韩福利电影| 国产精品极品在线| 精品久久久久久中文字幕一区奶水| 久久伊人91精品综合网站| 日韩a**中文字幕| 国产精品免费观看在线| 欧美亚洲第一区| 2019中文字幕免费视频| 久久91精品国产91久久久| 国产v综合v亚洲欧美久久| 亚洲人成电影在线播放| 亚洲跨种族黑人xxx| 国产免费一区二区三区在线观看| 国产精品女视频| 欧美亚洲国产日韩2020| 性欧美在线看片a免费观看| 亚洲成人国产精品| 亚洲最大成人在线| 国产一区二区三区欧美| 亚洲国产精品久久久久秋霞蜜臀| 精品中文字幕久久久久久| 国产成人精品久久二区二区| 国内伊人久久久久久网站视频| 国产成人综合一区二区三区| 亚洲欧美精品一区二区| 欧美尺度大的性做爰视频| 5566日本婷婷色中文字幕97| 91免费版网站入口| 久久精品电影一区二区| 一本一本久久a久久精品综合小说| 亚洲精品之草原avav久久| 亚洲999一在线观看www| 国产精品视频地址| 日韩欧美中文字幕在线播放| 国产综合在线看| 亚洲欧洲午夜一线一品| 亚洲第一免费网站| 日本欧美一级片| 日韩电影在线观看中文字幕| 91精品久久久久久综合乱菊| 中文字幕在线成人| 国产精品极品美女粉嫩高清在线| 性欧美长视频免费观看不卡| 欧美丝袜一区二区| 国产一区二区在线播放| 久久色免费在线视频| 欧美日韩一区二区免费在线观看| 久久久国产精品一区| 亚洲欧洲美洲在线综合| 亚洲欧美日韩视频一区| 亚洲福利视频专区| 国产综合香蕉五月婷在线| 久久久精品美女| 性色av一区二区三区红粉影视| 欧美性猛交xxxx久久久| 国产精品精品一区二区三区午夜版| 国产成人97精品免费看片| 欧美成人黑人xx视频免费观看| 亚洲男人第一av网站| 26uuu另类亚洲欧美日本一| 在线国产精品播放| 国语自产偷拍精品视频偷| 欧美极品xxxx| 一本色道久久88精品综合| 欧美日韩国产成人在线| 日韩精品www| 亚洲伦理中文字幕| 亚洲成人av在线播放| 亚洲精品中文字幕av| 在线观看精品自拍私拍| 97精品国产97久久久久久春色| 欧美日韩一区二区免费在线观看| 国产精品久久久亚洲| 国产一区二区黑人欧美xxxx| 亚洲开心激情网| 亚洲综合在线中文字幕| 国产精品三级在线| 97精品免费视频| 久久久久久久一区二区三区| 欧美精品福利在线| 国产一区二区色| 欧美色欧美亚洲高清在线视频| 91牛牛免费视频| 亚洲国产精品女人久久久| 国产精品啪视频| www.亚洲一区| 久久久999国产| 国产日韩视频在线观看| 亚洲精品中文字| 国产精品青青在线观看爽香蕉| 国产网站欧美日韩免费精品在线观看| 精品国产一区久久久| 国产精品精品一区二区三区午夜版| 亚洲久久久久久久久久久| 日韩欧美国产高清91| 亚洲一区av在线播放| 亚洲欧美在线看| 日韩二区三区在线| 亚洲欧美国产一区二区三区| 中文字幕亚洲欧美在线| 中文字幕一区电影| 亚洲电影免费观看| 97超碰色婷婷| 欧美大片欧美激情性色a∨久久| 尤物九九久久国产精品的特点| 精品国产户外野外| 欧美日韩国产中文精品字幕自在自线| 最近2019中文字幕mv免费看| 亚洲一区www| 在线播放国产精品| 91精品国产综合久久香蕉最新版| 久久频这里精品99香蕉| 欧美亚洲成人xxx| 日韩精品久久久久久久玫瑰园| 国产成人在线一区二区| 亚洲精选在线观看| 亚洲午夜女主播在线直播| 国产欧美婷婷中文| 欧美激情视频一区二区三区不卡| 奇门遁甲1982国语版免费观看高清| 成人久久一区二区三区| 18性欧美xxxⅹ性满足| 亚洲色图校园春色| 国产欧美日韩91| 国产精品1234| 亚洲电影免费观看高清完整版在线| 日韩精品免费综合视频在线播放| 日韩视频免费看| 亚洲精品国产综合区久久久久久久| 91色视频在线导航| 国产精品扒开腿做爽爽爽视频| 欧美一区二区三区免费观看| 欧美激情一级二级|