没学过系统学过状压,在补。。这道题我参考了深入浅出进阶篇的代码但是 90pts
for(ll i=1; i<=(1<<n); i++) f[i]=1e18;
f[0]=0;
for(ll i=0; i<(1<<n); i++)
for(ll k=1; k<=m; k++) {
ll t=i;
for(ll j=0; j<n; j++)
if((a[k][j+1]==1 && !(i&(1<<j))) ||
(a[k][j+1]==-1 && (i&(1<<j)))) t^=(1<<j);
f[t]=min(f[t], f[i]+1);
}
神奇的是,我把这段代码重复了两边,就过了??
f[0]=0;
for(ll i=0; i<(1<<n); i++)
for(ll k=1; k<=m; k++) {
ll t=i;
for(ll j=0; j<n; j++)
if((a[k][j+1]==1 && !(i&(1<<j))) ||
(a[k][j+1]==-1 && (i&(1<<j)))) t^=(1<<j);
f[t]=min(f[t], f[i]+1);
}
for(ll i=0; i<(1<<n); i++)
for(ll k=1; k<=m; k++) {
ll t=i;
for(ll j=0; j<n; j++)
if((a[k][j+1]==1 && !(i&(1<<j))) ||
(a[k][j+1]==-1 && (i&(1<<j)))) t^=(1<<j);
f[t]=min(f[t], f[i]+1);
}
这是为啥啊??求助大佬