#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
int v[40],ys[40][40];
int bj[40];
map<string,int>p;
inline int add(){
int jl=0;
for(int i=1;i<n;i++){
if(!bj[i])continue;
for(int j=i+1;j<=n;j++){
if(!bj[j])continue;
jl+=ys[i][j];
}
}
return jl;
}
void dfs(int f,int js,int sd){
if(sd==7){
ans=max(ans,js+add());
return;
}
for(int i=f+1;i<=n+1;i++){
bj[f]=1;
dfs(i,js+v[f],sd+1);
bj[f]=0;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
string name;int np;
cin>>name>>np;
p[name]=i;
v[i]=np;
}
for(int i=1;i<=m;i++){
string name1,name2;int np;
cin>>name1>>name2>>np;
int ys1=p[name1],ys2=p[name2];
ys[ys1][ys2]+=np,ys[ys2][ys1]+=np;
}
for(int i=1;i<=n;i++){
dfs(i,0,1);
}
cout<<ans;
return 0;
}
其中dfs
函数中for(int i=f+1;i<=n+1;i++)
若不加+1
而是i<=n
就会错,没明白这个问题。