1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
using namespace std; const int Maxn=100005; typedef pair<int,int> pii; int n,a[22][22][22],dp[(1<<21)+5]; int (int s){ int i,j,k; if(s==0) return 0; if(dp[s]!=-1) return dp[s]; for(i=0;i<n-2;i++) if(s&(1<<i)) break; for(j=i+1;j<n-1;j++) if(s&(1<<j)) for(int k=j+1;k<n;k++) if(s&(1<<k)) dp[s]=max(dp[s],dfs((s^(1<<i)^(1<<j)^(1<<k)))+a[i][j][k]); return dp[s]; } int main() { int x,y,z,k; scanf("%d",&n); int tot=n*(n-1)*(n-2)/6; for(int i=1;i<=tot;i++) { scanf("%d%d%d%d",&x,&y,&z,&k); a[x-1][y-1][z-1]=k; } dfs((1<<n)-1); memset(dp,-1,sizeof(dp)); printf("%d",dfs((1<<n)-1)); return 0; }
|
近期评论