hdu1518深搜DFS
生活随笔
收集整理的這篇文章主要介紹了
hdu1518深搜DFS
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
看隊友ac了這個。。加上很久沒寫過深搜了。。手癢了。。遂拿之解悶~~
一開始超時。。玩命的超時(這次用的printf了)。。查之發(fā)現(xiàn)二逼了代碼在已經(jīng)搜過的位置重復(fù)搜了幾次。。導(dǎo)致代碼目測時間復(fù)雜度為o(n!)。。玩命啊。。改之。。wa。。頓時想起以前做過之一題目。。即在搜索過程中搜不成功還得回溯。。遂改方法。。ac~
#include<iostream> #include<algorithm> using namespace std; const int MAXM=22; int m; int num[MAXM]; bool vis[MAXM]; bool cmp(int a,int b) {return a>b; } bool dfs(int remd,int pos,int count,int len) {int i;if(count==4){return 1;}for(i=pos;i<=m-1;i++){if((!vis[i])&&remd>=num[i]){vis[i]=1;remd=remd-num[i];if(remd==0&&dfs(len,0,count+1,len)){return 1;}else if(dfs(remd,i+1,count,len)){return 1;}remd=remd+num[i];vis[i]=0;}}return 0; }int main() {int t;scanf("%d",&t);while(t--){int i;memset(vis,0,sizeof(vis));int sum=0;scanf("%d",&m);for(i=0;i<=m-1;i++){scanf("%d",&num[i]);sum+=num[i];}if(sum%4){printf("no\n");continue;}sort(num,num+m,cmp);if(sum/4<num[0]){printf("no\n");continue;}if(dfs(sum/4,0,0,sum/4)){printf("yes\n");}else{printf("no\n");}}return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/cj695/archive/2012/08/02/2620258.html
總結(jié)
以上是生活随笔為你收集整理的hdu1518深搜DFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程语言的编程模型
- 下一篇: 求 A^B mod C. (1=A,C=