首页 > 代码库 > HDU4968 Improving the GPA dfs
HDU4968 Improving the GPA dfs
题意:给你平均分数,让你给出可能的最大的gpa和最小的gpa
解题思路:最开始因为误判了时间复杂度所以没敲,敲完1002以后发现一个dfs就可以解决了,枚举0 - 100000表示每个档次有多少科,最后算下总分是不是可能就行,dfs减枝会略微的快一点。
1 // File Name: 1009.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月19日 星期二 12时16分48秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque>10 #include<stack>11 #include<bitset>12 #include<algorithm>13 #include<functional>14 #include<numeric>15 #include<utility>16 #include<sstream>17 #include<iostream>18 #include<iomanip>19 #include<cstdio>20 #include<cmath>21 #include<cstdlib>22 #include<cstring>23 #include<ctime>24 #define LL long long25 26 using namespace std;27 int num[10];28 int mxsco[] = {100,84,79,74,69};29 int misco[] = {85,80,75,70,60};30 double sc[] = {4.0,3.5,3.0,2.5,2.0};31 int sco,n,lsco;32 double ansmi,ansmx;33 void dfs(int k , int lnum,int mx,int mi,double tsc)34 {35 //printf("%d %d\n",mx,mi);36 if(k == 5 )37 {38 //printf("%d %d\n",mx,mi);39 if(lsco <= mx && lsco >= mi && lnum == 0 )40 {41 if(tsc < ansmi)42 ansmi = tsc;43 if(tsc > ansmx)44 {45 /* printf("%d %d\n",mx,mi);46 for(int i = 0;i < 5;i ++)47 printf("%d ",num[i]);48 printf("\n");*/49 ansmx = tsc;50 }51 }52 return;53 }54 if(lsco < mi)55 return;56 for(int i = 0 ;i <= lnum ;i ++)57 {58 num[k] = i ; 59 dfs(k+1,lnum-i,mx+i*mxsco[k],mi+i*misco[k], tsc+i*sc[k]); 60 }61 }62 int main(){63 int T;64 scanf("%d",&T);65 while(T--)66 {67 scanf("%d %d",&sco,&n);68 lsco = sco*n;69 ansmi = 1e10;70 ansmx = -1e10;71 dfs(0,n,0,0,0.0);72 printf("%.4lf %.4lf\n",ansmi/n,ansmx/n);73 }74 return 0;75 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。