aoj 0033 Ball【dfs/枚举】
有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下往上标号递增。
输入:
第一行输入数据组数N。接下来N行为N组具体数据,每组数据中有10个整数,代表球的放入顺序。
输出:
对于每组数据,若策略存在,输出YES;若不存在,输出NO
【分析】:因为每个球都有向左或者向右两种状况,数据量比较小,可以直接进行dfs 全部的情况进行遍历。
【代码】:
#include <bits/stdc++.h> using namespace std; int x[],l[],r[];
int flag; void dfs(int i,int L,int R)
{
if(i>)
{
flag = ;
return;
} if(flag)
{
return;
} if(x[i]>l[L-])
{
l[L] = x[i];
dfs(i+,L+,R);
}
if(x[i]>r[R-])
{
r[R] = x[i];
dfs(i+,L,R+);
} }
int main()
{
int t; scanf("%d",&t);
while(t--)
{
for(int i=;i<=;i++)
{
scanf("%d",&x[i]);
}
flag = ;
dfs(,,);
if(flag)
{
puts("YES");//不要加\n 因为puts输出字符串隐含了换行
}
else
{
puts("NO");
}
}
return ;
}
/*
2
3 1 4 2 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
*/
dfs
#include<cstdio>
#include<cstring> int a[], l[], r[], t, i, j, lc, rc, cnt;
bool vis[], flag; bool solve()
{
for (i = ; i < ; ++i)
{
memset(l, , sizeof(l));
memset(r, , sizeof(r));
lc = rc = ;
for (cnt = , j = i; cnt < ; ++cnt, j >>= )
{
if (j & ) l[lc++] = a[cnt];
else r[rc++] = a[cnt];
}
flag = true;
for (j = ; j < lc; ++j)
if (l[j] < l[j - ])
{
flag = false;
break;
}
if (flag)
for (j = ; j < rc; ++j)
if (r[j - ] > r[j])
{
flag = false;
break;
}
if (flag) return true;
}
return false;
} int main()
{
scanf("%d", &t);
while (t--)
{
memset(vis, , sizeof(vis));
for (i = ; i < ; ++i)
scanf("%d", &a[i]);
puts(solve() ? "YES" : "NO");
}
return ;
}
枚举
aoj 0033 Ball【dfs/枚举】的更多相关文章
- AOJ -0033  Ball(DFS)
		
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22516 一道需要思考的搜索题. 题意:十个球按给定顺序从图中所示容器中下落, ...
 - AOJ 0033 Ball【DFS】
		
有一个筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B管或C管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B管和C管中的球从下往上标号递增. 输入: 第一行输 ...
 - Aizu 0033 Ball(dfs,贪心)
		
日文题面...题意:是把一连串的有编号的球往左或者往右边放.问能不能两边都升序. 记录左边和右边最上面的球编号大小,没有就-1,dfs往能放的上面放. #include<bits/stdc++. ...
 - Aizu/Aoj 0033  Ball
		
题目大意: 有编号1到10共10个球,从上方丢下去,入口处可以选择进入左边或者右边,最后10个球全部落下去后如果左右两侧都是从小到大的顺序,则输出YES:否则输出NO. 题目原本的标签枚举,复杂度是2 ...
 - POJ1288 Sly Number(高斯消元 dfs枚举)
		
由于解集只为{0, 1, 2}故消元后需dfs枚举求解 #include<cstdio> #include<iostream> #include<cstdlib> ...
 - POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)
		
题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd lcm/gcd=a/gcd*b/gcd 可知a/gc ...
 - POJ 1270 Following Orders (拓扑排序,dfs枚举)
		
题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y. 要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排 ...
 - HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)
		
想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...
 - poj 1753 Flip Game(bfs状态压缩 或 dfs枚举)
		
Description Flip game squares. One side of each piece is white and the other one is black and each p ...
 
随机推荐
- C#中多态
			
我的理解是:通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态. 1: OverRide 实现多态 public class Animal { public virtual void ...
 - c# IList<T> 深拷贝
			
class A { public string a1{get;set}; public string a2{get;set}; public IList<B> a3{get;set}; / ...
 - 【BZOJ2134】单选错位 概率DP
			
一句话:有一些看似有关系的期望在把事件全面发生之后就变得相互独立了 #include<cstdio> using namespace std; ]; double ans; int mai ...
 - Java实现十进制数转十六进制数
			
Now~Let's begin our second question~ 如何利用Java语言将十进制数字转换成十六进制数字呢? 我第一次编码出来的效果是酱紫的~ /** * */ package c ...
 - Input操作文件
			
在HTML表单中,可以上传文件的唯一控件就是<input type="file">. 注意:当一个表单包含<input type="file" ...
 - HDFS集中化缓存管理
			
概述 HDFS中的集中化缓存管理是一个明确的缓存机制,它允许用户指定要缓存的HDFS路径.NameNode会和保存着所需快数据的所有DataNode通信,并指导他们把块数据缓存在off-heap缓存中 ...
 - Java     super和this
			
this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本 ...
 - offset--BUG
			
offsetWidth所获取的宽度并不是div的实际宽度,它包括div的width.border等. 在JS函数中,可以通过obj.style.width来获取div的实际宽度,但是这种方式style ...
 - Spring学习--Bean 之间的关系
			
Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...
 - COGS2085 Asm.Def的一秒
			
时间限制:1 s 内存限制:256 MB [题目描述] “你们搞的这个导弹啊,excited!” Asm.Def通过数据链发送了算出的疑似目标位置,几分钟后,成群结队的巡航导弹从“无蛤”号头顶掠过 ...