DFS 枚举

来源:互联网 发布:淘宝店卖童装用压货吗 编辑:程序博客网 时间:2024/05/18 00:53

附转载网址:http://m.blog.csdn.net/article/details?id=50803721


Aoj 0033 Ball【dfs枚举】

发表于2016/3/4 16:42:12  154人阅读

分类: dfs 其他oj

网址:

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0033

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=108221#problem/C 




题意:(见图)有一个形似央视大楼的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下往上标号递增。
输入:第一行输入数据组数N。接下来N行为N组具体数据,每组数据中有10个整数,代表球的放入顺序。
输出:对于每组数据,若策略存在,输出YES;若不存在,输出NO


因为每个球都有向左或者向右两种状况,数据量比较小,可以直接进行dfs 全部的情况进行遍历。


#include<stdio.h>#include<string.h>int x[15],l[15],r[15];int kase;void dfs(int i,int j,int k)//i 是当前下落的球,j是左边的桶的第几个球,k 是右边放入{if(i>10)//如果可以全部下落,肯定满足{kase=1;return;}if(kase){return;}if(x[i]>l[j-1])//尝试落在左边{l[j]=x[i];dfs(i+1,j+1,k);}if(x[i]>r[k-1])//尝试落在右边{r[k]=x[i];dfs(i+1,j,k+1);}}int main(){int t; //freopen("shuju.txt","r",stdin);scanf("%d",&t);while(t--){for(int i=1;i<=10;++i){scanf("%d",&x[i]);}kase=0;dfs(1,1,1);if(kase){printf("YES\n");}else{printf("NO\n");}}return 0;} 


0 0
原创粉丝点击