求助
  • 板块学术版
  • 楼主Thunder_S
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/10/5 10:42
  • 上次更新2023/11/4 04:47:33
查看原帖
求助
166078
Thunder_S楼主2021/10/5 10:42
#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 报错,为什么?

2021/10/5 10:42
加载中...