鱼C论坛

 找回密码
 立即注册
查看: 2627|回复: 1

一直超时,也没有输出问题,请问怎么改?

[复制链接]
发表于 2022-4-21 17:13:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i,t,a,b,c,d,e,j,min,max,m,n,p,q,g,q1,g1;
  5.         scanf("%d",&t);
  6.         for(i=0;i<t;i++)
  7.         {
  8.                 int num=0,sum=0,sum1=0,sum2=0;
  9.                 scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
  10.                 int A[a],B[b],C[c],D[d],E[e];
  11.                 for(j=0;j<a;j++)
  12.                 scanf("%d",&A[j]);
  13.                 for(j=0;j<b;j++)
  14.                 scanf("%d",&B[j]);
  15.                 for(j=0;j<c;j++)
  16.                 scanf("%d",&C[j]);
  17.                 for(j=0;j<d;j++)
  18.                 scanf("%d",&D[j]);
  19.                 for(j=0;j<e;j++)
  20.                 scanf("%d",&E[j]);
  21.                 scanf("%d %d",&min,&max);
  22.                 for(q=0;q<d;q++)
  23.                 {
  24.            for(q1=0;q1<d;q++)
  25.            {
  26.                    if(q==q1) sum1=D[q];
  27.                    else sum1=D[q]+D[q1];
  28.                    for(g=0;g<e;g++)
  29.                    {
  30.                        for(g1=0;g1<e;g++)
  31.                        {
  32.                                if(g==g+1) sum2=E[g];
  33.                                else sum2=E[g]+E[g1];
  34.                            for(m=0;m<a;m++)
  35.                            {
  36.                            for(n=0;n<b;n++)
  37.                            {
  38.                                    sum=0;
  39.                                 sum=sum1+sum2+A[m]+B[n];
  40.                                    if(sum>=min&&sum<=max) num++;
  41.                            }
  42.                        }
  43.                         for(p=0;p<c;p++)
  44.                         {
  45.                                 sum=0;
  46.                                 sum=sum1+sum2+C[p];
  47.                                 if(sum2>=min&&sum2<=max) num++;
  48.                         }
  49.                     }
  50.                 }
  51.             }
  52.                 }
  53.             printf("%d\n",num);
  54.         }
  55.         return 0;
  56. }
复制代码

在学校餐厅,有 a 种汤,b 种饭,c 种面条,d 种荤菜,e 种素菜。为了保证膳食搭配,小王每顿饭都会点 1~2 样荤菜,1~2 样素菜(不重复)。同时,在小王心情好的时候,会点一样饭,再配上一种汤。在心情不好的时候,就只吃一种面条。因为经济有限,小王每次点餐的总价在 min~max 之间。小王想知道,总共有多少种不同的点餐方案。

输入描述
输入数据第一行包含一个整数 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, 表示每次点餐的价格范围

输出描述
对于每组测试数据,输出一行,包含一个整数,表示点餐方案数。

样例输入
Copy to Clipboard
1
2 2 2 2 2
2 3
3 1
5 2
1 4
3 6
5 8
样例输出
Copy to Clipboard
3
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-22 15:42:07 | 显示全部楼层
本帖最后由 jhq999 于 2022-4-22 16:04 编辑

用了最笨的方法拆解

  1. #include<stdio.h>
  2. void su(int **cai,int *caicount,int sum,int min,int max,int *count)
  3. {
  4.         int s[2]={sum,sum};
  5.         for (int i = 0; i < caicount[4]; i++)
  6.         {
  7.                 sum=s[0];
  8.                 sum+=cai[4][i];
  9.                 if (sum>max)continue;
  10.                 if(sum>=min)
  11.                 {
  12.                         (*count)++;
  13.                 }
  14.                 s[1]=sum;

  15.                 for (int j = 0; j < caicount[4]; j++)
  16.                 {

  17.                         if (i!=j)
  18.                         {
  19.                                 sum=s[1];
  20.                                 sum+=cai[4][j];
  21.                                 if (sum>max)continue;
  22.                                 if(sum>=min)
  23.                                 {
  24.                                         (*count)++;
  25.                                 }

  26.                         }
  27.                 }
  28.         }

  29. }
  30. void hun(int **cai,int *caicount,int sum,int min,int max,int *count)
  31. {
  32.         int h[2]={sum,sum};

  33.         for (int i = 0; i < caicount[3]; i++)
  34.         {
  35.                 sum=h[0];
  36.                 sum+=cai[3][i];
  37.                 if (sum>max)continue;
  38.                 h[1]=sum;
  39.                 su(cai,caicount,sum,min,max,count);
  40.                 for (int j = 0; j < caicount[3]; j++)
  41.                 {

  42.                         if (i!=j)
  43.                         {
  44.                                 sum=h[1];
  45.                                 sum+=cai[3][j];
  46.                                 if (sum>max)continue;
  47.                                 su(cai,caicount,sum,min,max,count);
  48.                         }
  49.                 }
  50.         }

  51. }
  52. void tangandmifan(int **cai,int *caicount,int sum,int min,int max,int *count)
  53. {

  54.         for (int i= 0; i < caicount[0]; i++)
  55.         {

  56.                 for (int j = 0;j < caicount[1];j++)
  57.                 {
  58.                         sum=0;
  59.                         sum+=cai[0][i]+cai[1][j];
  60.                         if (sum>max)continue;
  61.                         hun(cai,caicount,sum,min,max,count);

  62.                 }
  63.         }

  64. }
  65. int main()
  66. {
  67.         int i,t,a,b,c,d,e,j,min,max,m,n,p,q,g,q1,g1;
  68.         scanf("%d",&t);

  69.         int num=0,sum=0,count=0;
  70.         scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
  71.         int *A=new int[a],*B=new int[b],*C=new int[c],*D=new int[d],*E=new int[e],*cai[5]={A,B,C,D,E},caicount[5]={a,b,c,d,e};
  72.         for(j=0;j<a;j++)
  73.                 scanf("%d",&A[j]);
  74.         for(j=0;j<b;j++)
  75.                 scanf("%d",&B[j]);
  76.         for(j=0;j<c;j++)
  77.                 scanf("%d",&C[j]);
  78.         for(j=0;j<d;j++)
  79.                 scanf("%d",&D[j]);
  80.         for(j=0;j<e;j++)
  81.                 scanf("%d",&E[j]);
  82.         scanf("%d %d",&min,&max);
  83.         tangandmifan(cai,caicount,sum,min,max,&count);

  84.         for (i = 0; i < caicount[2]; i++)
  85.         {
  86.                 sum=cai[2][i];
  87.                 if (sum>max)continue;
  88.                 hun(cai,caicount,sum,min,max,&count);
  89.         }
  90.         printf("%d",count);
  91.         for (i = 0; i < 5; i++)
  92.         {
  93.                 delete[] cai[i];
  94.         }
  95.         return 0;
  96. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表