FZU2086 餐厅点餐

来源:互联网 发布:安卓音乐播放器 知乎 编辑:程序博客网 时间:2024/06/10 03:28

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


数据不大,直接暴力就好了

#include<cstdio>#include<string>#include<iostream>#include<algorithm>using namespace std;typedef long long LL;const int maxn=1e5+10;int T,n[5],a[5][10],f[3][111],t[3],l,r;int main(){scanf("%d",&T);while(T--){for (int i=0;i<5;i++) scanf("%d",&n[i]);for (int i=0;i<5;i++){for (int j=0;j<n[i];j++) scanf("%d",&a[i][j]);}t[0]=t[1]=t[2]=0;for (int i=0;i<n[3];i++) f[0][t[0]++]=a[3][i];for (int i=0;i<n[3];i++) for (int j=i+1;j<n[3];j++) f[0][t[0]++]=a[3][i]+a[3][j];for (int i=0;i<n[4];i++) f[1][t[1]++]=a[4][i];for (int i=0;i<n[4];i++) for (int j=i+1;j<n[4];j++) f[1][t[1]++]=a[4][i]+a[4][j];for (int i=0;i<n[2];i++) f[2][t[2]++]=a[2][i];for (int i=0;i<n[0];i++) for (int j=0;j<n[1];j++) f[2][t[2]++]=a[0][i]+a[1][j];scanf("%d%d",&l,&r);int ans=0;for (int i=0;i<t[0];i++)for (int j=0;j<t[1];j++)for (int k=0;k<t[2];k++)if (f[0][i]+f[1][j]+f[2][k]>=l&&f[0][i]+f[1][j]+f[2][k]<=r) ans++;printf("%d\n",ans);}return 0;}



0 0
原创粉丝点击