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> #include <string.h> #include <algorithm> using namespace std; #define up(i,x,y) for(i=x;i<=y;i++) #define up2(i,x,y) for(i=x;y;i++) #define mem(a,b) memset(a,b,sizeof(a)) #define w(x) while(x) #define inf 99999999 double a[105],dp[1005][105]; int i,j,k,n,m,t,sum; int main() { up(i,60,100) { if(i<=69) a[i]=2; else if(i<=74) a[i]=2.5; else if(i<=79) a[i]=3; else if(i<=84) a[i]=3.5; else a[i]=4; } scanf("%d",&t); w(t--) { scanf("%d%d",&m,&n); sum=n*m; up(i,0,sum) up(j,0,n) dp[i][j]=inf; up(i,60,100) dp[i][1]=a[i]; up(j,2,n) up(i,0,sum) up2(k,60,(k<=100&&(i-k)>=60*(j-1))) dp[i][j]=min(dp[i][j],dp[i-k][j-1]+dp[k][1]); printf("%.4f ",dp[sum][n]/n); up(i,0,sum) up(j,0,n) dp[i][j]=0; up(i,60,100) dp[i][1]=a[i]; up(j,2,n) up(i,0,sum) up2(k,60,(k<=100&&(i-k)>=60*(j-1))) dp[i][j]=max(dp[i][j],dp[i-k][j-1]+dp[k][1]); printf("%.4f\n",dp[sum][n]/n); } return 0; }
HDU4968:Improving the GPA(DP),布布扣,bubuko.com
原文:http://blog.csdn.net/libin56842/article/details/38705189