FZU 2086 餐厅点餐

暴力枚举一下就可以得到答案。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn=100+10;
struct X
{
    int cost;
}hun[maxn],su[maxn],fan[maxn],tang[maxn],mian[maxn];
int a,b,c,d,e;
int aa,bb,cc,dd,ee;
int MIN,MAX;
int A[maxn],B[maxn],C[maxn],D[maxn],E[maxn];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
    scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
    for(int i=0;i<a;i++) scanf("%d",&A[i]);
    for(int i=0;i<b;i++) scanf("%d",&B[i]);
    for(int i=0;i<c;i++) scanf("%d",&C[i]);
    for(int i=0;i<d;i++) scanf("%d",&D[i]);
    for(int i=0;i<e;i++) scanf("%d",&E[i]);
    scanf("%d%d",&MIN,&MAX);
    
    aa=bb=cc=dd=ee=0;
    for(int i=0;i<a;i++) tang[aa++].cost=A[i];
    for(int i=0;i<b;i++) fan[bb++].cost=B[i];
    for(int i=0;i<c;i++) mian[cc++].cost=C[i];
    for(int i=0;i<d;i++)
    {
        hun[dd++].cost=D[i];
        for(int j=i+1;j<d;j++)
        {
            hun[dd++].cost=D[i]+D[j];
        }
    }

    for(int i=0;i<e;i++)
    {
        su[ee++].cost=E[i];
        for(int j=i+1;j<e;j++)
        {
            su[ee++].cost=E[i]+E[j];
        }
    }

    int ans=0;
    for(int i=0;i<dd;i++)
    {
        for(int j=0;j<ee;j++)
        {
            //心情好
            for(int k=0;k<bb;k++)
            {
                for(int s=0;s<aa;s++)
                {
                    if(hun[i].cost+su[j].cost+fan[k].cost+tang[s].cost>=MIN
                    &&hun[i].cost+su[j].cost+fan[k].cost+tang[s].cost<=MAX)ans++;
                }
            }

            //心情差
            for(int k=0;k<cc;k++)
            {
                if(hun[i].cost+su[j].cost+mian[k].cost>=MIN
                    &&hun[i].cost+su[j].cost+mian[k].cost<=MAX)ans++;
            }
        }
    }


    printf("%d\n",ans);
    }

    return 0;
}

 

你可能感兴趣的:(FZU 2086 餐厅点餐)