题意:给平均成绩和科目数,求可能的最大学分和最小学分。
分析:
枚举一下,可以达到复杂度可以达到10^4,我下面的代码是10^5,可以把最后一个循环撤掉。
刚开始以为枚举档次的话是5^10,但是这个又不要求顺序,所以只是枚举个数就行了。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define LL __int64
const int maxn = +;
const int INF = <<;
using namespace std; int main()
{
int t, i, j, k, l, m, sc, n, sum1, sum2, y;
double gp, ans1, ans2;
scanf("%d", &t);
while(t--)
{
ans1 = INF;
ans2 = -;
scanf("%d%d", &sc, &n);
y = sc*n; for(i = ; i <= n; i++)
for(j = ; j <= n-i; j++)
for(k = ; k <= n-i-j; k++)
for(l = ; l <= n-i-j-k; l++)
for(m = ; m <= n-i-j-k-l; m++)
{
if(i+j+k+l+m==n)
{
//printf("%d %d %d %d %d\n", i, j, k, l, m);
sum1 = (i*+j*+k*+l*+m*);
sum2 = (i*+j*+k*+l*+m*);
gp = i*+j*2.5+k*+l*3.5+m*; if(y>=sum1&&y<=sum2)
{
if(gp<ans1) ans1 = gp;
if(gp>ans2) ans2 = gp;
}
}
}
//cout<<ans1<<endl;
ans1 = ans1*1.0/n;
ans2 = ans2*1.0/n;
printf("%.4lf %.4lf\n", ans1, ans2);
}
return ;
}