80分玄关
查看原帖
80分玄关
1176727
yuanzongzi799楼主2025/6/22 00:40
#include<bits/stdc++.h>
using namespace std;
int v,g;
int vetas[30],ciliao[20][20];
int minn=35;
int data[30][30];
int nowvetas[36];
int fa=1;
int zzfa;
bool pd()
{
    for(int i=1;i<=v;i++)
    {
        if(nowvetas[i]<vetas[i])
            return false;
    }
    return true;
}
void print()
{
    cout<<minn<<" ";
    for(int i=1;i<=minn;i++)
        cout<<data[zzfa][i]<<" ";
    return;
}
void dfs(int dep,int now,int count)
{
    for(int i=1;i<=v;i++)
    {
        nowvetas[i]+=ciliao[now][i];
    }
    data[fa][count]=now;
    if(pd()&&count<minn)
    {
        minn=count;
        zzfa=fa;
        fa++;
        return;
    }
    for(int i=now+1;i<=g;i++)
    {
        dfs(dep+1,i,count+1);
        for(int j=1;j<=v;j++)
        {
            nowvetas[j]-=ciliao[i][j];
        }
    }
}
int main()
{
    cin>>v;
    for(int i=1;i<=v;i++)
        cin>>vetas[i];
    cin>>g;
    for(int i=1;i<=g;i++)
        for(int j=1;j<=v;j++)
            cin>>ciliao[i][j];
    dfs(1,0,0);
    print();
    return 0;
}
2025/6/22 00:40
加载中...