求工作分配问题的时间复杂度

#include
using namespace std;
int a[100][100],sum=0,minn=2147483647,i,j,n;
int b[100];
void dfs(int dep)
{
int r;
for (r=1;r<=n;++r)//dep表示第几个人,r表示工作
if (!b[r])
{
b[r]=1;
sum+=a[dep][r];//a[dep][r]表示第dep个人做第r个工作的费用
if (dep==n&&sum<minn)
{
minn=sum;
}
if(dep!=n)
{
if (sum<minn)//剪枝
dfs(dep+1);
}
sum-=a[dep][r];//回溯一步
b[r]=0;
}
}
int main()
{
cin>>n;
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
cin>>a[i][j];
dfs(1);
cout<<minn<<endl;
return 0;
}