不知道为什么五个RE
查看原帖
不知道为什么五个RE
411046
血细胞楼主2021/1/29 20:35
#include<stdio.h>
int V[30],a[20][30],vis[20],v,g,total[30]={0},bian[20],sum=0,T=1,k=0,K=1,t=0;
int check()
{
	int i;
	for(i=1;i<=v;i++)
	{
		if(V[i]>total[i]){return 0;}
	}
	return 1;
}
void fun(int x)
{
	int i,j;
	if(K==x)
	{
		if(K==1)
		{
		for(i=T;i<=g;i++)
		{
			sum++;k++;bian[k]=i;
		    for(j=1;j<=v;j++)
			{
				total[j]=total[j]+a[i][j];
			}
		    if(check()){return;}
			for(j=1;j<=v;j++)
			{
				total[j]=total[j]-a[i][j];
			}
		    sum--;k--;
		    if(i==g)
			{
				for(j=1;j<=v;j++)
				{
					total[j]=0;
				}
				sum=0;
		        k=0;
		        K=K+1;
				t=0;
				T=1;
		        fun(1);
				return;
			}
		}
		}
		else
		{
		for(i=T;i<=g;i++)
		{
			sum++;k++;bian[k]=i;
		    for(j=1;j<=v;j++)
			{
				total[j]=total[j]+a[i][j];
			}
		    if(check()){return;}
			for(j=1;j<=v;j++)
			{
				total[j]=total[j]-a[i][j];
			}
		    sum--;k--;
		    if(t==g-K+1&&i==g)
			{
				for(j=1;j<=v;j++){total[j]=0;}
				for(j=1;j<=g;j++){vis[j]=0;bian[j]=0;}
				sum=0;
		        k=0;
		        K=K+1;
				T=1;
				t=0;
		        fun(1);
				return;
			}
		}
		}
	}
	else
	{
		for(i=T;i<=g+T-K;i++)
		if(!vis[i])
		{
			sum++;k++;bian[k]=i;
			for(j=1;j<=v;j++)
			{
				total[j]=total[j]+a[i][j];
			}
			vis[i]=1;
			if(x==1){t=i;}
			T=i+1;
			fun(x+1);
			if(check()){return;}
			vis[i]=0;
			for(j=1;j<=v;j++)
			{
				total[j]=total[j]-a[i][j];
			}
			sum--;k--;
		}
	}
}
int main()
{
	int i,j;
	scanf("%d",&v);
	for(i=1;i<=v;i++)
	{
		scanf("%d",&V[i]);
	}
	scanf("%d",&g);
	for(i=1;i<=g;i++)
	{
		for(j=1;j<=v;j++)
		{
			scanf("%lld",&a[i][j]);
		}
	}
	fun(1);
	printf("%d",sum);
	for(i=1;i<=sum;i++)
	{
		printf(" %d",bian[i]);
	}
}
2021/1/29 20:35
加载中...