AC题解

麦睿生  •  3个月前


#include<bits/stdc++.h>
using namespace std;
int N;
int v[25];
int G;
int f[15][25];
int s[15];
int p[25];
int minans;
int ha[15];
void input()
{
    cin>>N;
    for (int i=0;i<N;i++)
        cin>>v[i];
    cin>>G;
    for (int i=0;i<G;i++)
        for (int j=0;j<N;j++)
            cin>>f[i][j];
}
void dfs(int n)
{
    int ok=1; 
    for (int i=0;i<N;i++)
        if (p[i]<v[i])
        {
            ok=0;
            break;
        }
    if (ok)
    {
        int ans=0;
        for (int i=0;i<n;i++)
            ans+=s[i];
        if (ans<=minans)
        {
            minans=ans;
            memset(ha,0,sizeof(ha));
            for (int i=0;i<G;i++)
                if (s[i]==1) ha[i]=1;
        }
        return;
    }
    if (n==G) return;
    for (s[n]=0;s[n]<=1;s[n]++)
    {
        for (int i=0;i<N;i++)
            p[i]+=f[n][i]*s[n];
        dfs(n+1);
        for (int i=0;i<N;i++)
            p[i]-=f[n][i]*s[n];
    }
}
int main()
{
    input();
    minans=100000;
    dfs(0);
    cout<<minans;
    for (int i=0;i<G;i++)
        if  (ha[i]) cout<<' '<<i+1;
    cout<<endl;
    return 0;
}

评论: