fzu 2086 餐厅点餐(枚举)

Description

Jack最近喜欢到学校餐厅吃饭,好吃干净还便宜。

在学校餐厅,有a种汤,b种饭,c种面条,d种荤菜,e种素菜。

为了保证膳食搭配,Jack每顿饭都会点1~2样荤菜,1~2样素菜(不重复)。同时,在Jack心情好的时候,会点一样饭,再配上一种汤。在心情不好的时候,就只吃一种面条。

因为经济有限,Jack每次点餐的总价在min~max之间。Jack想知道,总共有多少种不同的点餐方案。

Input

输入数据第一行包含一个整数T,表示测试数据的组数,对于每组测试数据:

第一行为整数a,b,c,d,e(0<a,b,c,d,e<=10)

第二行为a个大于零的整数,表示a种汤的价格

第三行为b个大于零的整数,表示b种饭的价格

第四行为c个大于零的整数,表示c种面条的价格

第五行为d个大于零的整数,表示d种荤菜的价格

第六行为e个大于零的整数,表示e种素菜的价格

第七行为两个整数min max,表示每次点餐的价格范围

Output

对于每组测试数据,输出一行,包含一个整数,表示点餐方案数。

Sample Input

1
2 2 2 2 2
2 3
3 1
5 2
1 4
3 6
5 8

Sample Output

3
测试数据比较弱,用暴搜0ms
#include <iostream>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int a,b,c,d,e,mins,maxs;
        int x1[10],x2[10],x3[10],x4[10],x5[10];
        int i,j,count1=0;
        int s1,s2,s3,s4,s5,sum1,sum2,sum3,sum4;
        cin>>a>>b>>c>>d>>e;
        for(i=0;i<a;i++)
            cin>>x1[i];
        for(i=0;i<b;i++)
            cin>>x2[i];
        for(i=0;i<c;i++)
            cin>>x3[i];
        for(i=0;i<d;i++)
            cin>>x4[i];
        for(i=0;i<e;i++)
            cin>>x5[i];
        cin>>mins>>maxs;
        for(s4=0;s4<d;s4++)  //荤菜
        {
            for(i=s4;i<d;i++)
            {
                if(i==s4) sum1=x4[s4];
                else sum1=x4[s4]+x4[i];
                for(s5=0;s5<e;s5++) //素菜
                {
                   for(j=s5;j<e;j++)
                   {
                       if(j==s5) sum2=x5[s5];
                       else sum2=x5[s5]+x5[j];
                       for(s2=0;s2<b;s2++)  //心情好时吃饭,汤
                          for(s1=0;s1<a;s1++)
                          {
                            sum3=x2[s2]+x1[s1];
                            int sum=sum1+sum2+sum3;
                            if(sum>=mins&&sum<=maxs)
                              count1++;
                          }
                       for(s3=0;s3<c;s3++)  //心情不好时吃面条
                        {
                           sum4=x3[s3];
                           int sum=sum1+sum2+sum4;
                           if(sum>=mins&&sum<=maxs)
                              count1++;
                        }
                    }
                 }
             }
         }
        cout<<count1<<endl;
      }
      return 0;
}

你可能感兴趣的:(fzu 2086 餐厅点餐(枚举))