比赛 20231005 评测结果 AAAAAAAAAA
题目名称 BUG修复 最终得分 100
用户昵称 小金 运行时间 0.178 s
代码语言 C++ 内存使用 4.87 MiB
提交时间 2023-10-05 11:51:01
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
struct bd{
    long long hs;
    string b;
    string f;
}a[110];
int n,m,y[110],ji[1048590]={};
long long mi=0x3f3f3f3f3f3f3f3f,s;
void so(int l,long long s)
{
    int p=1;
    for(int i=0;i<n;i++)
    {
        if(y[i]==1)
        {
            p=0;
        }
    }
    if(p==1)
    {
        if(s<mi)
        {
            mi=s;
        }
        return;
    }
    if(s>mi)
    {
        return;
    }
    for(int i=1;i<=m;i++)
    {
        if(i!=l)
        {
            int f=1;
            for(int j=0;j<n;j++)
            {
                if((a[i].b[j]=='+'&&y[j]==0)||(a[i].b[j]=='-'&&y[j]==1))
                {
                    f=0;
                }
            }
            if(f==0)
            {
                continue;
            }
            int bf[110]={};
            for(int j=0;j<n;j++)
            {
                bf[j]=y[j];
            }
            for(int j=0;j<n;j++)
            {
                if(a[i].f[j]=='-')
                {
                    y[j]=0;
                }
                if(a[i].f[j]=='+')
                {
                    y[j]=1;
                }
            }
            int x=0;
            for(int j=0;j<n;j++)
            {
                x=x*2+y[j];
            }
            if(ji[x]==1)
            {
                for(int j=0;j<n;j++)
                {
                    y[j]=bf[j];
                }
                continue;
            }
            else
            {
                ji[x]=1;
            }
            so(i,s+a[i].hs);
            for(int j=0;j<n;j++)
            {
                y[j]=bf[j];
            }
            ji[x]=0;
        }
    }
}
int main()
{
    freopen("bug.in","r",stdin);
    freopen("bug.out","w",stdout);
    for(int i=0;i<110;i++)
    {
        y[i]=1;
    }
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a[i].hs>>a[i].b>>a[i].f;
    }
    so(0,0);
    if(mi!=0x3f3f3f3f3f3f3f3f)
    {
        cout<<mi;
    }
    else
    {
        cout<<'0';
    }
    return 0;
}