P1688 餐厅点餐

题目描述

因疫情原因,同学们只能在学校食堂就餐,学校为了保证同学们的就餐,准备了各种食品供大家选择。在学校餐厅,有 a 种汤,b 种饭,c 种面条,d 种荤菜,e 种素菜。为了保证膳食搭配,小王每顿饭都会点 1~2 样荤菜,1~2 样素菜(不重复)。同时,在小王心情好的时候,会点一样饭,再配上一种汤。在心情不好的时候,就只吃一种面条。因为经济有限,小王每次点餐的总价在 min~max 之间。小王想知道,总共有多少种不同的点餐方案。

输入描述

输入数据第一行包含一个整数 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, 表示每次点餐的价格范围

输出描述

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

样例输入

Copy to Clipboard
1 2 2 2 2 2 2 3 3 1 5 2 1 4 3 6 5 8 

样例输出

Copy to Clipboard
3

#include<iostream>
using namespace std;
int main()
{   
    int t,minm,maxm;
    cin>>t;
    while(t--){
        int a[11],b[11],c[11],d[11],e[11];
        int a1,b1,c1,d1,e1; 
        int num=0,sum1=0,sum2=0,sum3=0;
        cin>>a1>>b1>>c1>>d1>>e1;
        for(int i=0;i<a1;++i) cin>>a[i];
        for(int i=0;i<b1;++i) cin>>b[i];
        for(int i=0;i<c1;++i) cin>>c[i];
        for(int i=0;i<d1;++i) cin>>d[i];
        for(int i=0;i<e1;++i) cin>>e[i];

        cin>>minm>>maxm;

        for(int n4=0;n4<d1;++n4){
            for(int k4=n4;k4<d1;++k4){

                if(k4==n4) sum1=d[n4];
                else sum1=d[n4]+d[k4];

                for(int n5=0;n5<e1;++n5){
                    for(int k5=n5;k5<e1;++k5){

                        if(k5==n5) sum2=e[n5];
                        else sum2=e[n5]+e[k5];

                        for(int n1=0;n1<a1;++n1){
                            for(int n2=0;n2<b1;++n2){

                                sum3=a[n1]+b[n2];
                                int sum=0;
                                sum+=sum3+sum1+sum2;
                                if(sum>=minm&&sum<=maxm) num++;

                            }
                        }
                        for(int n3=0;n3<c1;++n3){

                            int sum=0;
                            sum+=sum1+sum2+c[n3];
                            if(sum>=minm&&sum<=maxm) num++;

                        }
                    }
                }
            }
        }cout<<num<<endl; 
    }
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值