FZU2086-餐厅点餐

                                              Problem 2086 餐厅点餐

Accept: 349    Submit: 1106
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem 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

12 2 2 2 22 33 15 21 43 65 8

 Sample Output

3

 Source

福州大学第九届程序设计竞赛


解题思路:暴力枚举


#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <climits>
#include <functional>
#include <vector>
#include <map>
#include <set>

using namespace std;

#define LL long long
const int INF=0x3f3f3f3f;

int main()
{
    int soup[10],rice[10],noodle[10],meat[10],veg[10];
    int mi,ma;
    int a,b,c,d,e;
    int t;
    scanf("%d",&t);
    while (t--)
    {
        int ans=0;
        scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
        for(int i=0; i<a; i++) scanf("%d",&soup[i]);
        for(int i=0; i<b; i++) scanf("%d",&rice[i]);
        for(int i=0; i<c; i++) scanf("%d",&noodle[i]);
        for(int i=0; i<d; i++) scanf("%d",&meat[i]);
        for(int i=0; i<e; i++) scanf("%d",&veg[i]);
        scanf("%d%d",&mi,&ma);
        sort(soup,soup+a);
        sort(rice,rice+b);
        sort(noodle,noodle+c);
        sort(meat, meat+d);
        sort(veg,veg+e);
        int sum;
        for(int i=0; i<a; i++)
            for(int j=0; j<b; j++)
                for(int r=0; r<d; r++)
                    for(int y=r+1; y<d; y++)
                        for(int w=0; w<e; w++)
                            for(int h=w+1; h<e; h++)
                            {
                                sum=soup[i]+rice[j]+meat[r]+meat[y]+veg[w]+veg[h];
                                if(sum>=mi&&sum<=ma) ans++;
                            }//一汤一饭两荤两素
        for(int i=0; i<a; i++)
            for(int j=0; j<b; j++)
                for(int r=0; r<d; r++)
                    for(int w=0; w<e; w++)
                        for(int h=w+1; h<e; h++)
                        {
                            sum=soup[i]+rice[j]+meat[r]+veg[w]+veg[h];
                            if(sum>=mi&&sum<=ma) ans++;
                        }//一汤一饭一荤两素
        for(int i=0; i<a; i++)
            for(int j=0; j<b; j++)
                for(int r=0; r<d; r++)
                    for(int y=r+1; y<d; y++)
                        for(int w=0; w<e; w++)
                        {
                            sum=soup[i]+rice[j]+meat[r]+meat[y]+veg[w];
                            if(sum>=mi&&sum<=ma) ans++;
                        }//一汤一饭两荤一素
        for(int i=0; i<a; i++)
            for(int j=0; j<b; j++)
                for(int r=0; r<d; r++)
                    for(int w=0; w<e; w++)
                    {
                        sum=soup[i]+rice[j]+meat[r]+veg[w];
                        if(sum>=mi&&sum<=ma) ans++;
                    }//一汤一饭一荤一素
        for(int i=0; i<c; i++)
            for(int r=0; r<d; r++)
                for(int y=r+1; y<d; y++)
                    for(int w=0; w<e; w++)
                        for(int h=w+1; h<e; h++)
                        {
                            sum=noodle[i]+meat[r]+meat[y]+veg[w]+veg[h];
                            if(sum>=mi&&sum<=ma) ans++;
                        }//一面两荤两素
        for(int i=0; i<c; i++)
            for(int r=0; r<d; r++)
                for(int w=0; w<e; w++)
                    for(int h=w+1; h<e; h++)
                    {
                        sum=noodle[i]+meat[r]+veg[w]+veg[h];
                        if(sum>=mi&&sum<=ma) ans++;
                    }//一面一荤两素
        for(int i=0; i<c; i++)
            for(int r=0; r<d; r++)
                for(int y=r+1; y<d; y++)
                    for(int w=0; w<e; w++)
                    {
                        sum=noodle[i]+meat[r]+meat[y]+veg[w];
                        if(sum>=mi&&sum<=ma) ans++;
                    }//一面两荤一素
        for(int i=0; i<c; i++)
            for(int r=0; r<d; r++)
                for(int w=0; w<e; w++)
                {
                    int sum=noodle[i]+meat[r]+veg[w];
                    if(sum>=mi&&sum<=ma) ans++;
                }//一面一荤一素
        printf("%d\n",ans);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值