为什么一下代码在测试点1至50、67至70会MLE?
#include<bits/stdc++.h>
#define int long long
using namespace std;
int cnt,T,d[3005][4096],a,b,c;
int n,m,i,j,k,Log[4096],maxn,A[3005][4096],f[4096][4096],Next[4096],ans,sup,now;
signed main()
{
memset(A,63,sizeof(A));
memset(f,63,sizeof(f)),ans=45121999;
cin>>n>>m;
maxn=(1<<n)-1;
for(i=1;i<=m;i++)
{
cin>>a>>b>>c;
A[a][b]=A[b][a]=min(c,A[a][b]);
}
for(i=0;i<=n;i++)Log[1<<i]=i;
for(i=0;i<=n;i++)f[0][1<<i]=0;
for(i=1;i<=maxn;i++)
{
cnt=0;
for(j=sup=maxn^i;j;j=(j-1)&sup)Next[j]=cnt,cnt=j;
for(j=cnt;j;j=Next[j])
{
now=Log[j&(-j)]+1,T=45121999;
for(k=1;k<=n;k++)if(1<<(k-1)&i)T=min(T,A[now][k]);
d[i][j]=d[i][j^(j&-j)]+T;
}
}
for(i=1;i<n;i++)
for(j=1;j<=maxn;j++)
for(k=j;k;k=(k-1)&j)
f[i][j]=min(f[i][j],f[i-1][j^k]+i*d[j^k][k]);
for(i=0;i<=n;i++)ans=min(ans,f[i][maxn]);
cout<<ans;
return 0;
}