zoukankan      html  css  js  c++  java
  • Math Show CodeForces

    题目

    题意:

    有n个任务,每个任务有k个子任务,有m的时间来完成任务。每个任务的第i个子任务需要时间都是ti。完成一个子任务获得一分,完成一个大任务的所有子任务额外得一分。问如何在时间不超过m的情况下得到尽可能多的分。

    方法:

    枚举完成多少个大任务,直到时间不够。对于每次枚举,将剩下的所有大任务的子任务抽出来,按需要时间从短到长一个一个去完成,直到时间不够。记录能得到的最大分数。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int ans=0,n,k,m,sum;
     5 int a[100];
     6 int main()
     7 {
     8     int ans1,i,j,j1,m1;
     9     scanf("%d%d%d",&n,&k,&m);
    10     for(i=1;i<=k;i++)
    11     {
    12         scanf("%d",&a[i]);
    13         sum+=a[i];
    14     }
    15     sort(a+1,a+k+1);
    16     for(i=0;i<=n;i++)
    17     {
    18         m1=m-i*sum;
    19         if(m1<0)    break;
    20         ans1=i*(k+1);
    21         for(j1=1;j1<=k;j1++)
    22             for(j=1;j<=n-i;j++)
    23             {
    24                 m1-=a[j1];
    25                 if(m1<0)    goto lb;
    26                 ans1+=1;
    27             }
    28         
    29         lb:
    30             ans=max(ans,ans1);
    31     }
    32     printf("%d",ans);
    33     return 0;
    34 }
  • 相关阅读:
    <把时间当做朋友>读书笔记
    C语言-第12课
    C语言-第13课
    C语言-第11课
    python-第三课-字符串详解
    C语言-第10课
    C语言-第9课
    C语言-第8课
    C语言-第7课-enum和typedef分析
    C语言-第6课
  • 原文地址:https://www.cnblogs.com/hehe54321/p/cf-846b.html
Copyright © 2011-2022 走看看