ADV-拍卖

#include<stdio.h>
int shangpin[20];
int p[10][4];
int vlue;
int data[10];
int n,m;
void dfs(int step,int money){
    if(step==n){
        if(money>vlue) vlue=money;
    return;
    }
            for(int j=0;j<5;j++){            //每个人五种情况  不买、买两个(3)、买三个 
                if(j==0){                 //买两个商品 0与1
                    if(shangpin[p[step][0]]==1||shangpin[p[step][1]]==1)
                        continue;
                    else {
                        shangpin[p[step][0]]=1;
                        shangpin[p[step][1]]=1;
                        money+=2*p[step][3];
                        dfs(step+1,money);
                        shangpin[p[step][0]]=0;
                        shangpin[p[step][1]]=0;
                        money-=2*p[step][3];
                    }
                }
                if(j==1){                 //买两个商品 1与2
                    if(shangpin[p[step][2]]==1||shangpin[p[step][1]]==1)
                        continue;
                    else {
                        shangpin[p[step][2]]=1;
                        shangpin[p[step][1]]=1;
                        money+=2*p[step][3];
                        dfs(step+1,money);
                        shangpin[p[step][2]]=0;
                        shangpin[p[step][1]]=0;
                        money-=2*p[step][3];
                    }
                }
                if(j==2){                  //买两个商品 0和2
                    if(shangpin[p[step][0]]==1||shangpin[p[step][2]]==1)
                        continue;
                    else {
                        shangpin[p[step][0]]=1;
                        shangpin[p[step][2]]=1;
                        money+=2*p[step][3];
                        dfs(step+1,money);
                        shangpin[p[step][0]]=0;
                        shangpin[p[step][2]]=0;
                        money-=2*p[step][3];
                    }
                }
                if(j==3){                  //买三个商品商品 0 1和2
                    if(shangpin[p[step][0]]==1||shangpin[p[step][1]]==1||shangpin[p[step][2]]==1)
                        continue;
                    else {
                        shangpin[p[step][0]]=1;
                        shangpin[p[step][1]]=1;
                        shangpin[p[step][2]]=1;
                        money+=3*p[step][3];
                        dfs(step+1,money);
                        shangpin[p[step][0]]=0;
                        shangpin[p[step][1]]=0;
                        shangpin[p[step][2]]=0;
                        money-=3*p[step][3];
                    }
                }
                if(j==4){
                    dfs(step+1,money);
                }
            }

}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
        scanf("%d%d%d%d",&p[i][0],&p[i][1],&p[i][2],&p[i][3]);
    dfs(0,0);
    printf("%d",vlue);
}

 

posted @ 2017-03-21 17:21  Mr.Struggle  阅读(205)  评论(0编辑  收藏  举报