第一个点1.07ms,我要死了。。。
#include<bits/stdc++.h>
using namespace std;
char n;
int p[21][21],q[21][21],dp[21][1<<20];
int main(){
scanf("%d",&n);
for(register char i=1;i<=n;i++) for(register char j=1;j<=n;j++) scanf("%d",&p[i][j]);
for(register char i=1;i<=n;i++) for(register char j=1;j<=n;j++) scanf("%d",&q[i][j]);
for(register char i=1;i<=n;i++) for(register char j=1;j<=n;j++) p[i][j]*=q[j][i];
for(register char i=1;i<=n;i++){
for(register int j=0;j<(1<<n);j++){
for(register char k=1;k<=n;k++){
if((j>>k-1)&1) dp[i][j]=max(dp[i][j],dp[i-1][j-(1<<k-1)]+p[i][k]);
}
}
}
printf("%d",dp[n][(1<<n)-1]);
return 0;
}
哪位卡常大佬帮我卡卡?