@[tlnllkbp](/space/show?uid=106177) -1是什么东西
by 老K @ 2018-10-15 20:29:30
打扰了
by 老K @ 2018-10-15 20:29:42
所以这个数据正解是3吗
by niiick @ 2018-10-15 20:43:24
@[niiick](/space/show?uid=60885) 是啊, 只用状压的是-1
by tlnllkbp @ 2018-10-15 20:44:16
嗯。。还以为自己的题解也被叉掉了
by niiick @ 2018-10-15 20:47:22
状压跑的出来啊,我跑的就是3。。。
by Soulist @ 2018-10-16 08:26:20
状压可以,只是跑地太慢
by qsmoonzh @ 2018-10-23 15:15:06
@[Mital](/space/show?uid=30036)
请问可以学习一下您的做法吗
by lqhsr @ 2019-10-31 19:30:20
状缩-1
by gjh303987897 @ 2019-11-09 15:07:54
```
#include<bits/stdc++.h>
#define IL inline
#define RI register int
IL void in(int &x)
{
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
int a[108][18],f[2048],n,m;
int main()
{
in(n),in(m);
memset(f,0x3f,sizeof f);
for(RI i=1;i<=m;i++)
for(RI j=1;j<=n;j++)
in(a[i][j]);
f[(1<<n)-1]=0;
for(RI i=(1<<n)-1;i>=0;i--)
{
for(RI j=1;j<=m;j++)
{
int now=i;
for(RI l=1;l<=n;l++)
{
if(a[j][l]==0)continue;
if(a[j][l]==1&&(i&(1<<(l-1)))) now^=(1<<(l-1));
if(a[j][l]==-1&&!(i&(1<<(l-1)))) now^=(1<<(l-1));
}
f[now]=std::min(f[now],f[i]+1);
}
}
for(RI i=(1<<n)-1;i>=0;i--)
{
for(RI j=1;j<=m;j++)
{
int now=i;
for(RI l=1;l<=n;l++)
{
if(a[j][l]==0)continue;
if(a[j][l]==1&&(i&(1<<(l-1)))) now^=(1<<(l-1));
if(a[j][l]==-1&&!(i&(1<<(l-1)))) now^=(1<<(l-1));
}
f[now]=std::min(f[now],f[i]+1);
}
}
printf("%d",f[0]==1061109567?-1:f[0]);
}
```
@[tlnllkbp](/user/106177)
这样呢
by yoy68 @ 2020-04-06 22:51:40