paimai

#include<iostream>

int data[8][4]={0};

int b[3][3]={1,1,0,

             1,0,1,

             0,1,1};

int sp[17]={0};

int n,m;   //n是拍卖品 m是人数

int max=0;

void dfs(int step,int mon)

{   

    if(step==m)

    {

        if(mon>max)

        {

           max=mon;

        }

        return;

    }

    for(int i=0;i<3;i++)   //0不拍 1拍两个 2 拍三个

    {

        if(i==0)

        {

            dfs(step+1,mon);

        }

        if(i==1)

        {

            for(int j=0;j<3;j++)

            {

                if(j==0)

                {

                    if(sp[data[step][0]]==0&&sp[data[step][1]]==0)

                    {

                        sp[data[step][0]]=1;

                        sp[data[step][1]]=1;

                        dfs(step+1,mon+data[step][3]*2);

                        sp[data[step][0]]=0;

                        sp[data[step][1]]=0;

 

                    }

                }

                if(j==1)

                {

                    if(sp[data[step][1]]==0&&sp[data[step][2]]==0)

                    {

                        sp[data[step][1]]=1;

                        sp[data[step][2]]=1;

                        dfs(step+1,mon+data[step][3]*2);

                        sp[data[step][1]]=0;

                        sp[data[step][2]]=0;

 

                    }

                }

                if(j==2)

                {

                    if(sp[data[step][0]]==0&&sp[data[step][2]]==0)

                    {

                        sp[data[step][0]]=1;

                        sp[data[step][2]]=1;

                        dfs(step+1,mon+data[step][3]*2);

                        sp[data[step][0]]=0;

                        sp[data[step][2]]=0;

 

                     }

 

            }

        }

        }

        if(i==2)

        {

            if(sp[data[step][0]]==0&&sp[data[step][1]]==0&&sp[data[step][2]]==0)

            {

                sp[data[step][0]]=1;

                sp[data[step][1]]=1;

                sp[data[step][2]]=1;

                dfs(step+1,mon+data[step][3]*3);

                sp[data[step][0]]=0;

                sp[data[step][1]]=0;

                sp[data[step][2]]=0;

 

            }

 

        }

    }

 

}

 

int main()

{  

    freopen("input.txt","r",stdin);

    scanf("%d%d",&n,&m); //m 人数

    for(int i=0;i<m;i++)

    { 

        for(int j=0;j<4;j++)

        {

        scanf("%d",&data[i][j]);

        }

 

    }

    for(int i=0;i<m;i++)

    { 

        for(int j=0;j<4;j++)

        {

        printf("%d ",data[i][j]);

        }

 

        printf("\n");

    }

 

    dfs(0,0);

    printf("%d",max);

 

 

}

 

posted on 2017-02-27 15:33  霸王程  阅读(141)  评论(0编辑  收藏  举报