hdu 4620 Fruit Ninja Extreme

基本搜索題,代碼調了好久。。。

以後繼續加強代碼能力

#include<stdio.h>
#include<string.h>
#include<algorithm>
using std ::sort;
struct node
{
    int t,c[22],num,cc;
}f[222];
int n,m,w;
int vis[222],ans,rou[33],path[33];
bool cmp(node a,node b){
    return a.t<b.t;
}
void dfs(int dep,int len,int pre)//dep表示訪問的編號,len表示連擊,pre表示之前訪問的點
{
    int i,j,k,mark[11],cou;
    if(len>ans){
        ans=len;
        memcpy(rou,path,sizeof(rou));
    }
    if(dep==n)return ;
    if(n-dep+len<=ans)return ;
    if(pre!=-1&&(f[dep].t-f[pre].t>w))return ;
    for(i=0,cou=0;i<f[dep].num;i++)
    {
        k=f[dep].c[i];
        if(!vis[k])
            mark[cou++]=k;
    }
    if(cou>=3){
        path[len]=f[dep].cc;
        for(i=0;i<cou;i++)vis[mark[i]]=1;
        dfs(dep+1,len+1,dep);
        for(i=0;i<cou;i++)vis[mark[i]]=0;
    }
    dfs(dep+1,len,pre);
}
int main()
{
    int i,j,k,T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%d",&n,&m,&w);
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&f[i].num,&f[i].t);
            for(j=0;j<f[i].num;j++)
                scanf("%d",&f[i].c[j]);
            f[i].cc=i+1;
        }
        sort(f,f+n,cmp);
        memset(vis,0,sizeof(vis));
        ans=0;
        dfs(0,0,-1);
        printf("%d\n",ans);
        if(ans){
            sort(rou,rou+ans);
            printf("%d",rou[0]);
            for(i=1;i<ans;i++)printf(" %d",rou[i]);
            puts("");
        }
    }
    return 0;
}


發佈了54 篇原創文章 · 獲贊 44 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章