zoukankan      html  css  js  c++  java
  • FZU 2086 餐厅点餐(模拟)

    Problem 2086 餐厅点餐

    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

    1
    2 2 2 2 2
    2 3
    3 1
    5 2
    1 4
    3 6
    5 8

     Sample Output

    3

     Answer

    想说:这什么鬼!!!其实这个题目就是一个嵌套(2+(2||1))循环,在买下下一样物品之前,保存现在花的钱,处理完下面的循环再恢复回来。

     Code

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <set>
    #include <algorithm>
    #include <vector>
    #include <cstring>
    #define ms(a) memset(a,0,sizeof(a))
    using namespace std;
    int main()
    {
        int N;
        int a,b,c,d,e,ans,n,m,cnt,save;
        int va[11],vb[11],vc[11],vd[11],ve[11];
        //int via[11],vib[11],vic[11],vid[11],vie[11];
        //freopen("in.txt","r",stdin);
        cin>>N;
        while(N--)
        {
            ans=0;
            cin>>a>>b>>c>>d>>e;
            ms(va),ms(vb),ms(vc),ms(vd),ms(ve);
            //ms(via),ms(vib),ms(vic),ms(vid),ms(vie);
            for(int i=1; i<=a; i++)cin>>va[i];
            for(int i=1; i<=b; i++)cin>>vb[i];
            for(int i=1; i<=c; i++)cin>>vc[i];
            for(int i=1; i<=d; i++)cin>>vd[i];
            for(int i=1; i<=e; i++)cin>>ve[i];
            cin>>n>>m;
            for(int i=1; i<=e; i++)
            {
                cnt=ve[i];
                //vie[i]=1;
                save=cnt;
                //printf("%d ",ve[i]);
                for(int ii=0; ii<=e; ii++)
                {
                    if(cnt<n&&cnt>m)break;
                    //if(vie[ii])continue;
                    cnt+=ve[ii];
                    //printf("%d ",ve[ii]);
                    //vie[ii]=1;
                    int save2=cnt;
                    for(int j=1; j<=d; j++)
                    {
                        if(cnt<n&&cnt>m)break;
                        cnt+=vd[j];
                        //printf("%d ",vd[j]);
                        //vid[j]=1;
                        int save3=cnt;
                        for(int jj=0; jj<=d; jj++)
                        {
                            if(cnt<n&&cnt>m)break;
                            //if(vid[jj])continue;
                            cnt+=vd[jj];
                            //printf("%d ",vd[jj]);
                            int save4=cnt;
                            for(int k=1; k<=b; k++)
                            {
                                if(cnt<n&&cnt>m)break;
                                cnt+=vb[k];
                                //printf("%d ",vb[k]);
                                int save5=cnt;
                                for(int kk=1; kk<=a; kk++)
                                {
                                    if(cnt<n&&cnt>m)break;
                                    cnt+=va[kk];
                                    //printf("%d ",va[kk]);
                                    if(cnt>=n&&cnt<=m)ans++;
                                    cnt=save5;
                                    //printf("
    ");
                                }
                                cnt=save4;
                            }
                            //cnt=save4;
                            for(int k=1; k<=c; k++)
                            {
                                if(cnt<n&&cnt>m)break;
                                cnt+=vc[k];
                                if(cnt>=n&&cnt<=m)ans++;
                                cnt=save4;
                            }
                            if(jj==0)jj=j;
                            cnt=save3;
                        }
                        cnt=save2;
                        //vid[j]=0;
                    }
                    cnt=save;
                    //vie[ii]=0;
                    if(ii==0)ii=i;
                }
                //vie[i]=0;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    分布式缓存技术PK:选择Redis还是Memcached?
    Redis实战:如何构建类微博的亿级社交平台
    Redis内存使用优化与存储
    微信小程序 Image 图片实现宽度100%,高度自适应
    小程序跳转、请求、带参数请求小例子
    微信小程序 全局变量
    免费ftp服务器FileZilla Server配置
    分享一次在Windows Server2012 R2中安装SQL Server2008
    C# litJson 使用方法
    HttpHandler和ashx要实现IRequiresSessionState接口才能访问Session信息(转载)
  • 原文地址:https://www.cnblogs.com/gpsx/p/5242943.html
Copyright © 2011-2022 走看看