
4 75 1 75 2 75 3 75 10
3.0000 3.0000 2.7500 3.0000 2.6667 3.1667 2.4000 3.2000HintIn the third case, there are many possible ways to calculate the minimum value of the GPA in the 4-Point Scale. For example, Scores 78 74 73 GPA = (3.0 + 2.5 + 2.5) / 3 = 2.6667 Scores 79 78 68 GPA = (3.0 + 3.0 + 2.0) / 3 = 2.6667 Scores 84 74 67 GPA = (3.5 + 2.5 + 2.0) / 3 = 2.6667 Scores 100 64 61 GPA = (4.0 + 2.0 + 2.0) / 3 = 2.6667
#include<stdio.h>
#define inf 99999999
int main()
{
double dp_max[11][1005],dp_min[11][1005];
int t,n,AVG,sum;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&AVG,&n);
sum=AVG*n;
for(int j=0;j<=n;j++)
for(int i=0;i<=sum;i++)
dp_max[j][i]=-1,dp_min[j][i]=inf;
dp_min[0][0]=dp_max[0][0]=0;
for(int i=1;i<=n;i++)
for(int s=sum;s>=60;s--)
for(int j=60;j<=100&&j<=s;j++)
{
if(j<70)
{
if(dp_max[i][s]<dp_max[i-1][s-j]+2.0&&dp_max[i-1][s-j]!=-1)
dp_max[i][s]=dp_max[i-1][s-j]+2.0;
if(dp_min[i][s]>dp_min[i-1][s-j]+2.0)
dp_min[i][s]=dp_min[i-1][s-j]+2.0;
}
else if(j<75)
{
if(dp_max[i][s]<dp_max[i-1][s-j]+2.5&&dp_max[i-1][s-j]!=-1)
dp_max[i][s]=dp_max[i-1][s-j]+2.5;
if(dp_min[i][s]>dp_min[i-1][s-j]+2.5)
dp_min[i][s]=dp_min[i-1][s-j]+2.5;
}
else if(j<80)
{
if(dp_max[i][s]<dp_max[i-1][s-j]+3.0&&dp_max[i-1][s-j]!=-1)
dp_max[i][s]=dp_max[i-1][s-j]+3.0;
if(dp_min[i][s]>dp_min[i-1][s-j]+3.0)
dp_min[i][s]=dp_min[i-1][s-j]+3.0;
}
else if(j<85)
{
if(dp_max[i][s]<dp_max[i-1][s-j]+3.5&&dp_max[i-1][s-j]!=-1)
dp_max[i][s]=dp_max[i-1][s-j]+3.5;
if(dp_min[i][s]>dp_min[i-1][s-j]+3.5)
dp_min[i][s]=dp_min[i-1][s-j]+3.5;
}
else
{
if(dp_max[i][s]<dp_max[i-1][s-j]+4.0&&dp_max[i-1][s-j]!=-1)
dp_max[i][s]=dp_max[i-1][s-j]+4.0;
if(dp_min[i][s]>dp_min[i-1][s-j]+4.0)
dp_min[i][s]=dp_min[i-1][s-j]+4.0;
}
}
printf("%.4lf %.4lf\n",dp_min[n][sum]/n,dp_max[n][sum]/n);
}
}
HDU4968Improving the GPA(分组背包),布布扣,bubuko.com
HDU4968Improving the GPA(分组背包)
原文:http://blog.csdn.net/u010372095/article/details/38708485