hdu 4620 Fruit Ninja Extreme(状压+dfs剪枝)
对t进行从小到大排序(要记录ID),然后直接dfs。
剪枝的话,利用A*的思想,假设之后的全部连击也不能得到更优解。
因为要回溯,而且由于每次cut 的数目不会超过10,所以需要回溯的下标可以利用一个二进制保存。
由于cut最多30个,所以方案也可以用一个二进制保存。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
bool vis[205];
struct node
{
int t;
int f[205];
int top;
int id;
}cut[205];
int n,m,w,ans;
int p;
int ansp;
bool cmp(const node &a,const node &b)
{
return a.t<b.t;
}
void dfs(int now,int score)
{
if(n-now+score<=ans) return; for(int i=now+1;i<=n;i++)
{
int aa=0;
if(cut[i].top<3) continue;
if(cut[i].t-cut[now].t>w&&score) break;
int tot=0;
for(int j=1;j<=cut[i].top;j++)
if(!vis[cut[i].f[j]]) vis[cut[i].f[j]]=1,aa|=(1<<(j-1)),tot++;
if(tot>=3)
{
p|=(1<<(cut[i].id-1));
dfs(i,score+1);
p&=(~(1<<(cut[i].id-1)));
}
int tt=1;
while(aa)
{
if(aa&1)
{
vis[cut[i].f[tt]]=0;
}
aa>>=1;
tt++;
}
}
if(score>ans)
{
ans=score;
ansp=p;
}
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&cut[i].top,&cut[i].t);
cut[i].id=i;
for(int j=1;j<=cut[i].top;j++)
scanf("%d",&cut[i].f[j]);
}
p=0;
ans=0;
memset(vis,false,sizeof(vis));
sort(cut+1,cut+n+1,cmp);
dfs(0,0);
printf("%d\n",ans);
int tt=1;
while(ansp)
{
if(ansp&1) {
if(tt==1) printf("%d",tt);
else printf(" %d",tt);
}
ansp=(ansp>>1);
tt++;
}
printf("\n");
}
}
hdu 4620 Fruit Ninja Extreme(状压+dfs剪枝)的更多相关文章
- 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 暴搜
题目大意:题目就是描述的水果忍者. N表示以下共有 N种切水果的方式. M表示有M个水果需要你切. W表示两次连续连击之间最大的间隔时间. 然后下N行描述的是 N种切发 第一个数字C表示这种切法可以切 ...
- hdu 4000 Fruit Ninja 树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4000 Recently, dobby is addicted in the Fruit Ninja. ...
- HDU 4000 Fruit Ninja 树状数组 + 计数
给你N的一个排列,求满足:a[i] < a[k] < a[j] 并且i < j < k的三元组有多少个. 一步转化: 求出所有满足 a[i] < a[k] < a[ ...
- hdu4620 Fruit Ninja Extreme
Fruit Ninja Extreme Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- ZOJ 1609 Equivalence(状压+dfs减枝)
ZOJ Problem Set - 1609 Equivalence Time Limit: 5 Seconds Memory Limit: 32768 KB When learning m ...
- bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排(状压dfs)
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1122 Solved: 80 ...
随机推荐
- 关于PEER - PEER毅恒挚友 - Powered by Discuz!
关于PEER - PEER毅恒挚友 - Powered by Discuz! PEER Experience Exchange Rostrum(PEER)由海外中国留学生和中国知名高校学生组成,服务中 ...
- 调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment之我的解决方法
private class ViewPagerAdapter extends FragmentPagerAdapter { FragmentManager mFragmentManager; ...
- 关于WEB三层架构的思考
1.MVC设计思想 MVC程序设计思想是眼下比較流行的WEB开发的模式,当中,M(model)是模型.即JavaBean,用来封装和保存数据:V(view)是视图,即JSP.用来显示内容:C(cont ...
- Struts 2最新0day破坏性漏洞(远程任意代码执行)等的重现方法
Struts 2的远程任意代码执行和重定向漏洞,是这两天互联网上最重大的安全事件,据说国内互联网企业中,很多电商纷纷中招,应该已经有大规模的用户隐私泄露.这里我们简单总结下怎样在自己机子上重现这些漏洞 ...
- <转载>网页设计中的F式布局
地址:http://www.uisdc.com/understanding-the-f-layout-in-web-design 网页设计中的F式布局 今天我们来重点介绍网页设计中的F式布局.传统的布 ...
- Delphi 10.1说明
发布说明:http://docwiki.embarcadero.com/RADStudio/Berlin/en/Main_Page更新说明:http://docwiki.embarcadero.com ...
- actor简介
今天抽时间,给team做了一次actor介绍,现附上ppt actor 简介及应用
- WebService 之 WSDL文件 解说
恩,我想说的是,是不是常常有人在开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户给你一个WSDL文件,说依照上面的进行适配,嘿嘿,这个时候,要是你曾经没有开发过,肯定会傻眼,那假设 ...
- Swift编程语言学习1.4——数值型字面量、数值类型转换
数值型字面量 整数字面量能够被写作: 一个十进制数,没有前缀 一个二进制数,前缀是0b 一个八进制数,前缀是0o 一个十六进制数,前缀是0x 以下的全部整数字面量的十进制值都是17: let deci ...
- Decoding BASE64 in ABAP
Code Gallery Decoding BASE64 in ABAP Skip to end of metadata Created by Frank Klausner, last modifie ...