借鉴了题解大佬方法写的深搜,但还是不知道为什么边界要初(st)>末(ed)啊,求大佬解答下
#include<stdio.h>
#include<stdlib.h>
int n,ans=100,xq[1000],m,sl[100][100];sum[1000]/*sum表示已选的种类*/,daan[100]/*答案*/;
int op(int su)
{
for(int a=1;a<=n;a++)
{int summ=0;
for(int b=1;b<=su;b++)
{
summ+=sl[sum[b]][a];
}
if(summ<xq[a])
return 0;
/*else
printf("%d+",summ);*/
}
/*for(int a=1;a<=su;a++)
printf("--%d ",sum[a]);*/
return 1;
}
int dfs(int st,int ed,int su)//s当前饲料种类
{
/*if(st>ed)
return;*/
if(st>ed)
{
if(op(su-1)==1)
{
if(su-1<ans)
{
ans=su-1;
for(int v=1;v<=su-1;v++)
daan[v]=sum[v];
}
}
return;
}
for(int a=st;a<=ed;a++)
{
sum[su]=a;
dfs(a+1,ed,su+1);
dfs(a+1,ed,su);
}
}
int main()
{
scanf("%d",&n);
for(int a=1;a<=n;a++)
scanf("%d",&xq[a]);
scanf("%d",&m);
for(int a=1;a<=m;a++)
for(int b=1;b<=n;b++)
scanf("%d",&sl[a][b]);
dfs(1,m,1);
printf("%d",ans);
for(int a=1;a<=ans;a++)
printf(" %d",daan[a]);
}