[HDOJ 4968] Improving the GPA [贪心]

69 篇文章 0 订阅
3 篇文章 0 订阅

已知一个成绩和绩点的转换表,每课的学分都是1,一共n门,n门总分为avg,则他的gpa最低是多少?最高是多少?

最开始想的dp..dp[i][j]表示前i门,成绩和为j+60*i,gpa的最值为多少..后来发现复杂度有点高没敢写..如果把成绩都除以5的话..最后又剩余一个100不知道怎么处理..

然后惊奇的发现可以贪心..算最高绩点的时候,依次把每科提升到85。算最低绩点的时候,先把所有科都提升到69,然后依次把每科提升到100。

#include <cstdio>
#include <cstring>

int avg,n,sum;
double maxgpa,mingpa;

int main() {
	int t,rn;
	scanf("%d",&t);
	while (t--) {
		scanf("%d%d",&avg,&n);
		avg-=60;
		maxgpa=mingpa=2.0*n;
		sum=avg*n;
		rn=n;
		while (rn--&&sum>0) {
			if (sum>=25) {
				sum-=25;
				maxgpa+=2.0;
			} else if (sum>=20) {
				sum-=20;
				maxgpa+=1.5;
			} else if (sum>=15) {
				sum-=15;
				maxgpa+=1.0;
			} else if (sum>=10) {
				sum-=10;
				maxgpa+=0.5;
			} else sum=0;
		}
		sum=(avg-9)*n;
		rn=n;
		while (rn--&&sum>0) {
			if (sum>=31) {
				sum-=31;
				mingpa+=2.0;
			} else if (sum>=16) {
				sum=0;
				mingpa+=2.0;
			} else if (sum>=11) {
				sum=0;
				mingpa+=1.5;
			} else if (sum>=6) {
				sum=0;
				mingpa+=1.0;
			} else if (sum>=1) {
				sum=0;
				mingpa+=0.5;
			}
		}
		printf("%.4lf %.4lf\n",mingpa/n,maxgpa/n);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值