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