Problem 2086 餐厅点餐 枚举

 Problem 2086 餐厅点餐

Accept: 379    Submit: 1198
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

soure

这题用枚举法,枚举四种情况即可


#include <iostream>
using namespace std;
int t,a,b,c,d,e;
int mi,ma;
int p[100000];
int h[11],s[11],m[11],ta[11],f[11];
int main()
{
cin>>t;
while(t--)
{
cin>>a>>b>>c>>d>>e;
int i=0;
for(i=0;i<a;i++) cin>>ta[i];
for(i=0;i<b;i++) cin>>f[i];
for(i=0;i<c;i++) cin>>m[i];
for(i=0;i<d;i++) cin>>h[i];
for(i=0;i<e;i++) cin>>s[i];
cin>>mi>>ma;
int j,k,l=0,w=0;
for(i=0;i<d;i++)//一荤一素 
{
if(h[i]>=ma) continue;
for(j=0;j<e;j++)
{
if(s[j]>=ma) continue;
 int t=h[i]+s[j];
 if(t<ma)
 p[l++]=t;
}
}
for(i=0;i<d;i++)//一荤两素 
{
if(h[i]>=ma) continue;
for(j=0;j<e-1;j++)
{
if(s[j]>=ma) continue;
for(k=j+1;k<e;k++)
{
if(s[k]>=ma) continue ;
 int t=h[i]+s[j]+s[k];
 if(t<ma)
 p[l++]=t;
}
}
}
for(i=0;i<e;i++)//两荤一素 
{
if(s[i]>=ma) continue;
for(j=0;j<d-1;j++)
{
if(h[j]>=ma) continue;
for(k=j+1;k<d;k++)
{
if(h[k]>=ma) continue ;
 int t=s[i]+h[j]+h[k];
 if(t<ma)
 p[l++]=t;
}
}
}
int o;
for(i=0;i<e-1;i++)//两荤两素 
{
if(s[i]>=ma) continue;

for(o=i+1;o<e;o++)
{
if(s[o]>=ma) continue;

for(j=0;j<d-1;j++)
{
if(h[j]>=ma) continue;
for(k=j+1;k<d;k++)
{
if(h[k]>=ma) continue ;
 int t=s[i]+h[j]+h[k]+s[o];
 if(t<ma)
 p[l++]=t;
}
}
}
}
for(i=0;i<l;i++)
{
for(j=0;j<b;j++)
{
int p1=p[i];
p1+=f[j];
int q=p1;
for(k=0;k<a;k++)
{
p1=q;
p1=p1+ta[k];
if(p1>=mi&&p1<=ma)
w++;
}
}
for(o=0;o<c;o++)
{
int p2=p[i];
p2+=m[o];
if(p2>=mi&&p2<=ma)
w++;

}
}
cout<<w<<endl;
}

    return 0;
}


人一我百!人十我万!永不放弃~~~怀着自信的心,去追逐梦想。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

じ☆夏妮国婷☆じ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值