【题解】比萨

题目描述

        南海的最大比萨店为即将来临的节日准备了T种不同加味的原料,但考虑到南海人的口味和其它一些因素,原料的使用有N种限制。

        T种不同原料的编号为1...T。一个限制如“5 3”即表示5号和3号加味原料不能同时使用。如此,此时使用三种原料3,5,6的比萨是不允许的。

        现在请你帮忙计算在上面条件下,最多可以制作多少不同的比萨(包括不添加任何加味原料的)。

输入输出格式

输入格式

        第一行,两个整数:T和N。

        下面有N行,每行表示一种限制。每行的第一个整数Z(1≦Z≦T)表示这行后面有Z个表示原料编号的整数,这些原料不能同时出现在一个比萨中。

输出格式

        一行,一个整数表示在上面的限制下最多可以制成多少种不同比萨。

输入输出样例

输入样例

6 5

1 1

2 4 2

3 3 2 6

1 5

3 3 4 6

输出样例

10

说明

样例说明

        共以下十种答案:无加料;2;2和3;2和6;3;3和4;3和6;4;4和6;6。

题解

        枚举每一种配料是否出现即可。

#include<iostream>

using  namespace std;

int t,n;
int temp,r[100][100];
int num,a[100],judge;
bool flag=true;

int main()
{
    cin>>t>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>temp;
        for(int j=1;j<=temp;j++)
        {
            cin>>r[i][j];
        }
    }
    
    while(!a[0])
    {
        if(flag) 
        {
            num++;
        }
        flag=true;
        for(int i=t;i>=0;i--)
        {
            if(a[i])
            {
                a[i]=0;
            }
            else
            {
                a[i]=1;
                break;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(!r[i][2])
            {
                if(a[r[i][1]])
                {
                    flag=false;
                    break;
                }
            }
            else
            {
                for(int j=1;;j++)
                {
                    if(!a[r[i][j]])
                    {
                        break;
                    }
                    else if(!r[i][j+1])
                    {
                        flag=false;
                        break;
                    }
                }
                if(!flag) break;
            }
        }
    }
    cout<<num;
    return 0;
}
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10463701.html