题目描述
因疫情原因,同学们只能在学校食堂就餐,学校为了保证同学们的就餐,准备了各种食品供大家选择。在学校餐厅,有 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;
}
}