题目传送门:https://www.luogu.org/problemnew/show/P1559
呜呜呜我终于自己想出怎么优化算法了。本来想练练二分图就看到这道题,这道题题意就是二分图求最大权匹配,然而只会求最大匹配的蒟蒻我并不会什么KM算法(等会看看好了),一看数据范围 (1≤n≤20),毫不犹豫进行搜索。以下为第一版代码(完全无优化的深搜):
#include<stdio.h>
#include<stdlib.h>
int p[51][51]={0},q[51][51]={0},vis[101]={0},step[101]={0};
int max=-1,n;
int judge()
{
int i,sum=0;
for(i=1;i<=n;i++)
sum+=p[i][step[i]]*q[step[i]][i];
if(sum>max)
max=sum;
return 0;
}
int dfs(int i)
{
int j;
if(i==n+1) {judge();return 0;}
for(j=1;j<=n;j++)
if(vis[j]==0)
{
vis[j]=1;
step[i]=j;
dfs(i+1);
step[i]=0;
vis[j]=0;
}
return 0;
}
int mai