HDU4620 Fruit Ninja Extreme(搜尋+剪枝)
題目連結:傳送門
題意:
水果忍者的遊戲,給定你n刀,m個水果,以及這一刀切的時間和這一刀可以切的水果的編號,如果兩刀之間相隔的時間不超過v,而且這兩刀都可以切超過三個水果那麼這兩刀就可以得一個高分。每個水果只能被切一次,求切的刀的編號使得可以得到最多的連擊。
分析:
搜尋+剪枝,剪枝就是當前所得到的連擊數+剩下所有的刀數小於當前最優的連擊數就跳出。
程式碼如下:
<span style="font-family:KaiTi_GB2312;font-size:18px;">#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 35;
struct Fruit_cut{
int num,t,id,c[10];
bool operator <(const struct Fruit_cut &tmp)const{
return t<tmp.t;
}
}cut[maxn];
int n,m,v;
int vis[210];
int ans[maxn],tot,tlong;
int tmp[maxn];
void dfs(int id,int pre){
if(n-id+tlong<=tot) return;
for(int i=id+1;i<=n;i++){
int num = 0;
for(int j=0;j<cut[i].num;j++){
int pos = cut[i].c[j];
if(!vis[pos]) num++;
vis[pos]++;
}
if((cut[i].t-pre<=v||!tlong)&&num>=3){
tmp[tlong++]=cut[i].id;
dfs(i,cut[i].t);
tlong--;
}
for(int j=0;j<cut[i].num;j++){
int pos = cut[i].c[j];
vis[pos]--;
}
}
if(tlong>tot){
tot = tlong;
for(int i=0;i<tlong;i++){
ans[i]=tmp[i];
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&v);
for(int i=1;i<=n;i++){
scanf("%d%d",&cut[i].num,&cut[i].t);
cut[i].id=i;
for(int j=0;j<cut[i].num;j++){
scanf("%d",&cut[i].c[j]);
}
}
sort(cut+1,cut+n+1);
tot=0,tlong=0;
memset(vis,0,sizeof(vis));
memset(ans,0,sizeof(ans));
dfs(0,cut[1].id);
sort(ans,ans+tot);
printf("%d\n",tot);
for(int i=0;i<tot-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[tot-1]);
}
return 0;
}
</span>
相關文章
- hdu4620 Fruit Ninja ExtremeUIREM
- HDU 4620 Fruit Ninja Extreme(搜尋)UIREM
- [leetcode 87 擾亂字串] [剪枝搜尋]LeetCode字串
- 模型剪枝:剪枝粒度、剪枝標準、剪枝時機、剪枝頻率模型
- 海量資料搜尋---搜尋引擎
- 搜尋
- HDU 5235 Friends (2015 Multi-University Training Contest 2 搜尋+剪枝)AI
- 搜尋引擎-03-搜尋引擎原理
- 搜尋引擎es-分詞與搜尋分詞
- elasticsearch搜尋Elasticsearch
- 字串搜尋字串
- vim搜尋
- 搜尋策略
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(上篇)Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(下篇)Elasticsearch
- 谷歌搜尋用上BERT,10%搜尋結果將改善谷歌
- 直播開發app,實時搜尋、搜尋引擎框APP
- 泛企業搜尋PK網際網路搜尋
- Elasticsearch——全文搜尋Elasticsearch
- Elasticsearch 向量搜尋Elasticsearch
- elasticsearch搜尋商品Elasticsearch
- Elasticsearch常用搜尋Elasticsearch
- jQuery 模糊搜尋jQuery
- Google搜尋大法Go
- Google搜尋API?GoAPI
- Google搜尋技巧Go
- 搜尋/查詢
- 搜尋插入位置
- 啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)演算法
- Ninja介紹
- Nebula 基於 ElasticSearch 的全文搜尋引擎的文字搜尋Elasticsearch
- Python之 常用查詢演算法:最小項搜尋、順序搜尋、二分搜尋Python演算法
- 直播系統程式碼,常用搜尋中搜尋歷史,搜尋推薦功能
- 尋路之 A* 搜尋演算法演算法
- [每天get點新技能]搜商——你不知道的搜尋概念:元搜尋
- 使用Google百度等搜尋引擎的常用搜尋技巧Go
- 雲搜尋服務在APP搜尋場景的應用APP
- Mac上神奇的內建搜尋引擎——Spotlight(聚焦搜尋)Mac