(枚举)餐厅点餐(fzu2086)

问题:

Jack最近喜欢到学校餐厅吃饭,好吃干净还便宜。

在学校餐厅,有a种汤,b种饭,c种面条,d种荤菜,e种素菜。

为了保证膳食搭配,Jack每顿饭都会点1~2样荤菜,1~2样素菜(不重复)。同时,在Jack心情好的时候,会点一样饭,再配上一种汤。在心情不好的时候,就只吃一种面条。

因为经济有限,Jack每次点餐的总价在min~max之间。Jack想知道,总共有多少种不同的点餐方案。

Input
输入数据第一行包含一个整数T,表示测试数据的组数,对于每组测试数据:

第一行为整数a,b,c,d,e(0

分析与解答:

我写了一遍w了,最后检查了一个小时,发现是e[i]我写成d[i]了md
这题就是数据量小,直接暴力,吃一种食物的两种吃法(吃一个,吃两个)的for遍历也是挺有新意的

代码参考:
https://blog.csdn.net/misdom_tian_ya/article/details/40212183

#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; 
    }
 } 

猜你喜欢

转载自blog.csdn.net/qq_40828914/article/details/81513921
今日推荐