#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 55
int n,m,x,ans,r[N],c[N],s[N],a[N][N],b[N][N];
void dg2(int x)
{
if (x>m)
{
for (int i=1;i<=m;++i)
b[s[i]][i]=c[i];
int res=1;
for (int i=1;i<=n;++i)
for (int j=1;j<=m;++j)
if (!b[i][j])
res*=(a[i][j]+1);
ans+=res;
return;
}
for (int i=1;i<=n;++i)
{
if (a[i][x]<c[x]||b[i][x]) continue;
s[x]=i;
dg2(x+1);
s[x]=0;
}
}
void dg1(int x)
{
if (x>n)
{
for (int i=1;i<=n;++i)
b[i][s[i]]=r[i];
dg2(1);
memset(b,0,sizeof(b));
return;
}
for (int i=1;i<=m;++i)
{
if (a[x][i]<r[x]) continue;
s[x]=i;
dg1(x+1);
s[x]=0;
}
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;++i)
scanf("%d",&x),r[i]=x;
scanf("%d",&m);
for (int i=1;i<=m;++i)
scanf("%d",&c[i]);
for (int i=1;i<=n;++i)
for (int j=1;j<=m;++j)
a[i][j]=min(r[i],c[j]);
dg1(1);
printf("%d\n",ans);
return 0;
}
最后那里的 min 报错,为什么?