【贪心】猜GPA最值

HDU 4968 Improving the GPA

题意:

已知各分值对应的绩点,给出n个科目的平均分ave,挑选n科的成绩求绩点可能的最大、最小值。

注:该学霸的成绩都≥60且≤100;

题解:

找最小值从最小绩点的上限开始挑,保证剩下的不大于100;

找最大值从最大绩点的下限开始挑,保证剩下的不小于60;

#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int N,n,ave;
    scanf("%d",&N);
    while(N--){
        scanf("%d%d",&ave,&n);
        int sum=ave*n,sum0=sum;
        double jd=0;
        for(int i=1;i<=n;i++){
            if(sum-69<=(n-i)*100){sum-=69;jd+=2;}
            else if(sum-74<=(n-i)*100){sum-=74;jd+=2.5;}
            else if(sum-79<=(n-i)*100){sum-=79;jd+=3;}
            else if(sum-84<=(n-i)*100){sum-=84;jd+=3.5;}
            else {sum-=100;jd+=4;}
        }
        printf("%.4f ",jd*1.0/n);
        sum=sum0;jd=0;
        for(int i=1;i<=n;i++){
            if(sum-85>=(n-i)*60){sum-=85;jd+=4;}
            else if(sum-80>=(n-i)*60){sum-=80;jd+=3.5;}
            else if(sum-75>=(n-i)*60){sum-=75;jd+=3;}
            else if(sum-70>=(n-i)*60){sum-=70;jd+=2.5;}
            else {sum-=60;jd+=2;}
        }
        printf("%.4f\n",jd*1.0/n);
    }
}

猜你喜欢

转载自blog.csdn.net/synlhr/article/details/80159904
GPA