HDU 4620 Fruit Ninja Extreme 暴搜
题目大意:题目就是描述的水果忍者。
N表示以下共有 N种切水果的方式。
M表示有M个水果需要你切。
W表示两次连续连击之间最大的间隔时间。
然后下N行描述的是 N种切发
第一个数字C表示这种切法可以切多少个水果。
第二个数字表示这种切法所处在的时间。
后C个数字表示此时这种切法所切掉的水果编号。
注意:同时切3个以上才表示连击,一个水果最多只能切一次。
思路:直接暴搜,再去加剪枝。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std; int gap,n,m;
int vis[205]; int tans[35];//开手动栈,不然容易超时
int ans[35];
int tanstop;
int anstop; struct node
{
vector<int>num;
int cnt;
int time;
int id;
bool operator < (const node &cmp) const
{
return time<cmp.time;
}
}cut[35]; void dfs(int ttime,int pos)
{
if(m-pos+tanstop<=anstop) return;//如果之后的全部放上来还比当前ANS小,那就不用继续了 A*思想
for(int i=pos+1;i<=m;i++)
{
if(cut[i].time-ttime<=gap||!tanstop)//每一次都可以作为起点。所以加上!tanstop
{
int tot=0;
int SIZE=cut[i].num.size();
for(int j=0;j<SIZE;j++)
{
if(vis[cut[i].num[j]]==0)
{
tot++;
}
vis[cut[i].num[j]]++;
}
if(tot>=3)
{
tans[tanstop++]=cut[i].id;
dfs(cut[i].time,i);
tanstop--;
}
for(int j=0;j<SIZE;j++)
vis[cut[i].num[j]]--;
}
else break;//如果此时时间已无法连击 后面的也就不行了
}
if(tanstop>anstop)
{
anstop=0;
for(int i=0;i<tanstop;i++)
ans[anstop++]=tans[i];
} } int main()
{
int T;
scanf("%d",&T);
while(T--)
{
tanstop=anstop=0; memset(vis,0,sizeof(vis)); scanf("%d%d%d",&m,&n,&gap); for(int i=1;i<=m;i++)
{
cut[i].num.clear();
scanf("%d%d",&cut[i].cnt,&cut[i].time);
cut[i].id=i;
for(int j=0;j<cut[i].cnt;j++)
{
int tmp;
scanf("%d",&tmp);
cut[i].num.push_back(tmp);
}
if(cut[i].cnt<=2){i--;m--;}
} sort(cut+1,cut+m+1);//按时间把切水果的方式排序 方便DFS dfs(1,0); printf("%d\n",anstop); sort(ans,ans+anstop);//要求升序输出 for(int i=0;i<anstop-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[anstop-1]);
}
return 0;
}
HDU 4620 Fruit Ninja Extreme 暴搜的更多相关文章
- hdu 4620 Fruit Ninja Extreme
Fruit Ninja Extreme Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4620 Fruit Ninja Extreme 搜索
搜索+最优性剪枝. DFS的下一层起点应为当前选择的 i 的下一个,即DFS(i + 1)而不是DFS( cur + 1 ),cur+1代表当前起点的下一个.没想清楚,TLE到死…… #include ...
- HDU 4620 Fruit Ninja Extreme(2013多校第二场 剪枝搜索)
这题官方结题报告一直在强调不难,只要注意剪枝就行. 这题剪枝就是生命....没有最优化剪枝就跪了:如果当前连续切割数加上剩余的所有切割数没有现存的最优解多的话,不需要继续搜索了 #include &l ...
- hdu 4620 Fruit Ninja Extreme(状压+dfs剪枝)
对t进行从小到大排序(要记录ID),然后直接dfs. 剪枝的话,利用A*的思想,假设之后的全部连击也不能得到更优解. 因为要回溯,而且由于每次cut 的数目不会超过10,所以需要回溯的下标可以利用一个 ...
- hdu4620 Fruit Ninja Extreme
Fruit Ninja Extreme Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 4000 Fruit Ninja 树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4000 Recently, dobby is addicted in the Fruit Ninja. ...
- hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)
Mines Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- HDU 5961:传递(暴搜)
http://acm.hdu.edu.cn/showproblem.php?pid=5961 题意:中文题意.给出两个图,判断这个两个图是否都是传递的.注意一下传递的定义要看清,一开始没看清连样例都看 ...
- HDU 4116 Fruit Ninja
http://acm.hdu.edu.cn/showproblem.php?pid=4116 题意:给N个圆,求一条直线最多能经过几个圆?(相切也算) 思路:枚举中心圆,将其他圆的切线按照极角排序,并 ...
随机推荐
- 【NOIP2014】生活大爆炸版石头剪刀布
石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第 8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的石头剪 ...
- Node.js学习笔记(2) - Node.js安装及入门hello world
今天来简单的记录一下Node.js的安装配置以及简单的入门 一.Node.js的安装 1.windows下的安装 windows下的安装很简单,只需要去官网http://nodejs.org中,找到w ...
- FolderSync Instant sync 即时同步
Folderpairs - Edit folderpair - Sync options - Instant sync Select this for instant sync on change. ...
- LM358资料及引脚图
LM358里面包括有两个高增益.独立的.内部频率补偿的双运放,适用于电压范围很宽的单电源,而且也适用于双电源工作方式,它的应用范围包括传感放大器.直流增益模块和其他所有可用单电源供电的使用运放的地方使 ...
- 怎样在MyEclipse上耍Chrome
近期在忙着期末大作业,所以Windows App和算法的专栏都没有更了,随后这几天都会陆续開始更新的,欢迎大家的关注啦-- 在写期末大作业的时候遇到一个问题.一个新的特性在MyEclipse自带的浏览 ...
- MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 ...
- sql语句分组/排序/计算总数/连接等sql语句书写
1.什么是表连接? 答:比如两张表,要获取的信息来自两张表,就需要通过外键的形式进行两张表的连接.最后产后组合信息. 表连接是通过join连接的.表连接说白了就是产生一个大表.表连接也都是用于查询上的 ...
- 算法:基于 RingBuffer 的 Deque 实现
背景 前两篇文章介绍了 Queue 的实现,很多类库都引入了 Deque,Deque 可以两头添加和删除,然后在 Deque 之上构建 Queue 和 Stack. Deque 代码 using Sy ...
- 基于Java IO 序列化方案的memcached-session-manager多memcached节点配置
在公司项目里想要在前端通过nginx将请求负载均衡,而后台的几组tomcat的session通过memcached(non-sticky模式)进行统一管理,这几组tomcat部署的web app是同一 ...
- ubuntu 键盘布局修改
键盘打不出 | 符号 sudo dpkg-reconfigure keyboard-configuration 改为标准的罗技键盘