首页 > 代码库 > hdu 4968 Improving the GPA (水 暴力枚举)

hdu 4968 Improving the GPA (水 暴力枚举)

题目链接

题意:给平均成绩和科目数,求可能的最大学分和最小学分。

分析:

枚举一下,可以达到复杂度可以达到10^4,我下面的代码是10^5,可以把最后一个循环撤掉。

刚开始以为枚举档次的话是5^10,但是这个又不要求顺序,所以只是枚举个数就行了。。

 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <algorithm> 7 #define LL __int64 8 const int maxn = 2000+10; 9 const int INF = 1<<28;10 using namespace std;11 12 int main()13 {14     int t, i, j, k, l, m, sc, n, sum1, sum2, y;15     double gp, ans1, ans2;16     scanf("%d", &t);17     while(t--)18     {19         ans1 = INF;20         ans2 = -1;21         scanf("%d%d", &sc, &n);22         y = sc*n;23 24         for(i = 0; i <= n; i++)25             for(j = 0; j <= n-i; j++)26                 for(k = 0; k <= n-i-j; k++)27                     for(l = 0; l <= n-i-j-k; l++)28                         for(m = 0; m <= n-i-j-k-l; m++)29                         {30                             if(i+j+k+l+m==n)31                             {32                                 //printf("%d %d %d %d %d\n", i, j, k, l, m);33                                 sum1 = (i*60+j*70+k*75+l*80+m*85);34                                 sum2 = (i*69+j*74+k*79+l*84+m*100);35                                 gp = i*2+j*2.5+k*3+l*3.5+m*4;36 37                                 if(y>=sum1&&y<=sum2)38                                 {39                                     if(gp<ans1) ans1 = gp;40                                     if(gp>ans2) ans2 = gp;41                                 }42                             }43                         }44         //cout<<ans1<<endl;45         ans1 = ans1*1.0/n;46         ans2 = ans2*1.0/n;47         printf("%.4lf %.4lf\n", ans1, ans2);48     }49     return 0;50 }