小黑的镇魂曲(HDU2155:贪心+dfs+奇葩解法)
题目:点这里
题目的意思跟所谓的是英雄就下100层一个意思……在T秒内能够下到地面,就可以了(还有一个板与板之间不能超过H高)。
接触这题目是在昨晚的训练赛,当时拍拍地打了个贪心+dfs,果断跟我想的一模一样,TLE了。
赛后我在宿舍里修改了好几次……均无果。后来,我大胆地假设,估计是最后两组出问题TLE的。。于是我就在程序里,指定在最后两组输出yes或者no,就这样奇葩地AC了……
我实验了三次,总共有2*2种可能……(差点就觉得人品差到不行了)
终于AC了。当然,平时练习真心不要这样子,但是比赛的时候果断要理智,能够AC出来就可以。且对于这类题目,YES & NO,尤其的好用。。如果省赛比赛出现到这情况,绝境也或许能逢生……
dfs的思路:参数有三: 当前所在的横坐标x,当前所在的板编号,当前所用时间。 返回在:超时,没超时且(落在第n快板或者高度为0,我的第n块板是地面,人为添加的),每次搜索都选择 左右两个方向的总代价最小的走。(当然,这必须被黑啊!这做法)
另外,随便翻了一下别人写的AC代码,用的是DP,如果大家有什么好的方法可以交流交流。
最后,预祝大家五一劳动节快乐!
附上AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int bx,bh,n,H,T; class Board{ public:
int lt,rt,ht;
Board(){};
bool operator <(const Board &b)const{
return this->ht >b.ht; }
bool in(int x){ //x落在板中? if(lt<=x&&rt>=x) return true;
return false;
} };
vector<Board> v;
bool dfs(int x,int ind,int cnt){
// cout<<x<<" "<<ind<<" "<<cnt<<endl;
if(cnt>T){ //超时,被抓到了!!!
return false;
}
if(ind==n||v[ind].ht==){
return true;
}
int lind,rind,k;
for( k=ind+;k<=n;k++){
if(v[k].in(v[ind].lt)){
lind=k; //找左边的板
break;
}
}
for( k=ind+;k<=n;k++){
if(v[k].in(v[ind].rt)){
rind=k;//找右边的板
break;
}
}
int lh=v[ind].ht-v[lind].ht; //左边高度代价
int rh=v[ind].ht-v[rind].ht; //右边高度 int lcnt=lh+x-v[ind].lt; //左边总代价=高度+横移
int rcnt=rh+v[ind].rt-x; //右边总代价
// cout<<lh<<" "<<rh<<" "<<lcnt<<" "<<rcnt<<endl;
if(lcnt<=rcnt){
//左边代价小,先走左边。 if(lh<=H&&dfs(v[ind].lt,lind,cnt+lcnt)){
return true;
} if(rh<=H&&dfs(v[ind].rt,rind,cnt+rcnt)){
return true;
} }else{
//反之 if(rh<=H&&dfs(v[ind].rt,rind,cnt+rcnt)){
return true;
} if(lh<=H&&dfs(v[ind].lt,lind,cnt+lcnt)){
return true;
} } return false; }
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int cas,i,ind;
scanf("%d",&cas);
while(cas--){ //恶劣的开始……
if(cas==){
puts("YES");
continue;
}
if(cas==){
puts("NO");
continue;
}
//恶劣的结束…… scanf("%d%d%d%d%d",&n,&bx,&bh,&H,&T);
v.clear();
v.resize(n+);
for( i=;i<n;i++){
scanf("%d%d%d",&v[i].lt,&v[i].rt,&v[i].ht);
}
v[n].lt=-; //添加“地板”
v[n].rt=;
v[n].ht=;
sort(v.begin(),v.end()); //排序。
// cout<<v[0].ht<<v[1].ht;
for(i=;i<=n;i++){
if(v[i].in(bx)){
ind=i; //开始掉下的板
break;
}
} if(dfs(bx,ind,bh-v[ind].ht)){ //没被抓到
puts("NO");
}else{
puts("YES");
}; } // fclose(stdin);
// fclose(stdout);
return ;
}
小黑的镇魂曲(HDU2155:贪心+dfs+奇葩解法)的更多相关文章
- hdu2155 小黑的镇魂曲(dp)
题意: 小黑的镇魂曲 Problem Description 这个事情发生在某一天,当小黑和SSJ正在约会的时候,邪恶的Guner抓走了SSJ, ...
- 【bzoj3252】攻略 贪心+DFS序+线段树
题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某 ...
- hdu6060[贪心+dfs] 2017多校3
/* hdu6060[贪心+dfs] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long L ...
- UVALive3902 Network[贪心 DFS&&BFS]
UVALive - 3902 Network Consider a tree network with n nodes where the internal nodes correspond to s ...
- GPS围栏两个多边形相交问题的奇葩解法
前言 GPS测量仪测量的产地面积,然后提交到系统中,系统需要校验这块产地和其他产地是否有重叠,重叠超过10%就要提出警告这块产地已经被XXX登记入库了.GPS测量仪测量出来的数据是连续的经纬度坐标数据 ...
- hdu4915 Parenthese sequence 贪心O(n)解法(new)
hdu4915 Parenthese sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- 【NOIP2003】传染病控制(-贪心/dfs)
我自己yy了个贪心算法,在某oj 0msAC~.然后去wikioi提交,呵呵,原来是之前oj的数据太弱给我水过了,我晕. 我之前的想法是在这棵树上维护sum,然后按时间来割边,每一时刻割已经感染的人所 ...
- HDU 5802 Windows 10 (贪心+dfs)
Windows 10 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5802 Description Long long ago, there was ...
- hdoj1242(dfs 剪枝 解法)
题意:拯救行动,天使r有多个朋友a(friends,在这里被坑了几次,没看清题意),天使被关在牢房里,等着朋友来拯救,求拯救天使的最短距离. 解法:如果不剪枝,200*200的地图会超时,可以以天使为 ...
随机推荐
- iOS开发——实用篇&提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- 交换a、b
有两个变量a和b,不使用任何中间变量交换a和b. 方法一: 采用如下方法: a=a+b; b=a-b; a=a-b; 这样做的缺点就是如果a.b都是比较大的数,则a=a+b时就会越界. 而采用: a= ...
- C++赋值运算符函数
为类添加赋值运算符函数: 类型定义 class CMyString { public: CMyString(char *pData = NULL); CMyString(const CMyString ...
- Helpers\TableBuilder
Helpers\TableBuilder Table builder helper is a class that would help you to create tables in MySQL ( ...
- win7引导项顺序
转载:http://jingyan.baidu.com/article/72ee561aa1d123e16138df81.html 问题描述: 个人在宿舍使用的比较多的是Window 7,而它的启动项 ...
- 本地计算机上的XXX服务启动后停止。某些服务在未由其它服务或程序使用时将自动停止。咋整?
用C#写个windows服务,安装部署后去启动时,提示说“本地计算机上的XXX服务启动后停止.某些服务在未由其它服务或程序使用时将自动停止”.咋整?就像下面酱紫: 度娘说不知道咋整,我想把程序附加到w ...
- Java中数组的快排
描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成, ...
- C#加密算法汇总(转载)http://www.cnblogs.com/zengxiangzhan/archive/2010/01/30/1659687.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 方法一: //须添加对System.Web的引用 ...
- 错误与修复:ASP.NET无法检测IE10,导致_doPostBack未定义JavaScript错误,恒处于FF5卷动条位置
浏览器版本号继续升级过程中.IE9诞生了,IE10 也即将问世,火狐5和6已经发布了,而7和8也快出现了,Opera已经到了11,Chrome还在继续,我也不知道,应该总在14和50之间吧.不管怎样, ...
- zabbix电话告警V1
最近决定将夜班值班人员取消,夜里告警采用机器人电话通知.总结一下这么几个情况,有问题还请指出,希望也能给大家多一个思路. V1做的太糙了,预计年初上V2 一.用谁家的服务 费用我没有太关注,主要就是看 ...