萌新求助各位大佬啊啊啊啊啊啊QAQ
查看原帖
萌新求助各位大佬啊啊啊啊啊啊QAQ
662039
Mayueriu楼主2022/4/11 22:59

借鉴了题解大佬方法写的深搜,但还是不知道为什么边界要初(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]);

}

2022/4/11 22:59
加载中...