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); }