问题标题: 酷町堂:1052怎么做啊,求思路!

2
0

0
已采纳
夏子健
夏子健
初级光能
初级光能

bool ok(int t)
{ for(int i=1;i<=n;i++)
    {
        if(g[t][i]&&now[i]==1)
        {
            return false;
        }
    }
    return true;
}
void dfs(int t,int sum)
{
    if(t>n)
    {
        if(sum>ans)
        {
            ans=sum;
            memcpy(best,now,sizeof(now));
        }
        return;
    }
    if(ok(t))
    {
        now[t]=1;
        dfs(t+1,sum+1);
        now[t]=0;
    }
    dfs(t+1,sum);
bool ok(int t)
{ for(int i=1;i<=n;i++)
    {
        if(g[t][i]&&now[i]==1)
        {
            return false;
        }
    }
    return true;
}
void dfs(int t,int sum)
{
    if(t>n)
    {
        if(sum>ans)
        {
            ans=sum;
            memcpy(best,now,sizeof(now));
        }
        return;
    }
    if(ok(t))
    {
        now[t]=1;
        dfs(t+1,sum+1);
        now[t]=0;
    }
    dfs(t+1,sum);
bool ok(int t)
{ for(int i=1;i<=n;i++)
    {
        if(g[t][i]&&now[i]==1)
        {
            return false;
        }
    }
    return true;
}
void dfs(int t,int sum)
{
    if(t>n)
    {
        if(sum>ans)
        {
            ans=sum;
            memcpy(best,now,sizeof(now));
        }
        return;
    }
    if(ok(t))
    {
        now[t]=1;
        dfs(t+1,sum+1);
        now[t]=0;
    }
    dfs(t+1,sum);

2
陆麟瑞
陆麟瑞
资深天翼
资深天翼

就是先用一个布尔型的b二维数组,来存储个个人之间的关系,如1,2是仇敌关系,那么b[1,2]就为true,用一个循环。

然后搜索

搜索条件

枚举每个人

如果之前没有别选过且与选过的人没有仇敌关系,就入选队伍(所谓的队伍就是一个数组)。

Pascal代码(没有写c++的,不知你学过没)

procedure search(t,s:longint);
var
 i:longint;
begin
 if t>m then begin if s>max then begin max:=s; d:=b; end; exit; end;
  if pd(t) then begin b[t]:=1; search(t+1,s+1); b[t]:=0;end;

 b[t]:=0;
 search(t+1,s);
end;

pd函数

function pd(t:longint):boolean;
var
 i:longint;
begin
 if t=1 then exit(true);
 for i:=1 to t-1 do
 if (c[i,t]=false)and(b[i]=1) then exit(false);
 exit(true);
end;
1
1
黄俊博
黄俊博
资深光能
资深光能

void flag(int x,int tot)
{
    if(x>n)
    {
        if(tot>send)
        {
            send=tot;
            memcpy(end,use,n+1);
        }
        return;
    }
    if(!can[x] && !use[x])
    {
        use[x]=true;
        bool now[105];
        memcpy(now,can,n+1);
        for(int j=0;j<vec[x].s;j++)
            can[vec[x].other[j]]=true;
        flag(x+1,tot+1);
        use[x]=false;
        memcpy(can,now,n+1);
    }
    flag(x+1,tot);
}

0
0
0
杨舰中
杨舰中
高级守护
高级守护
用多个数组储存仇敌关系、选择方案,并且用搜索,

 

0
0
0
0
屠景瑞
屠景瑞
新手光能
新手光能

需要用多个数组存关系。

我要回答