HDOJ1009
来源:互联网 发布:英语听力口语软件 编辑:程序博客网 时间:2024/06/05 11:31
贪心问题,我的可能不是最优解,但是比较通俗易懂,注释也比较易懂,与大家分享
1 #include <iostream> 2 #include <iomanip> 3 #include <string.h> 4 5 using namespace std; 6 7 double J[1000]; 8 double F[1000]; 9 double Ratio[1000];10 11 int FindMax() //返回最大值的下标12 {13 double max = 0;14 int key;15 for(int k = 0;k < 1000;k ++)16 if(max < Ratio[k])17 {18 max = Ratio[k];19 key = k;20 }21 return key;22 }23 24 int main()25 {26 27 int m,n;28 int i,j,key;29 double result;30 while((cin>>m>>n))31 { //最外层循环,表示测试用例的个数32 if((m == -1) && (n == -1)) break;33 memset(J,0,1000 * sizeof(double));34 memset(F,0,1000 * sizeof(double));35 result = 0;36 for(i = 0;i < n;i++)37 cin>>J[i]>>F[i]; //输入38 for(i = 0;i < n;i++)39 {40 if(F[i] != 0)41 Ratio[i] = J[i]/F[i]; //计算单位的比例42 else43 Ratio[i] = J[i];44 }45 46 47 //特殊情况,当F的值为0时,首先全部累加到result48 if(n == 0)49 {50 result == 0;51 cout<<setiosflags(ios::fixed)<< setprecision(3)<<result<<endl;52 continue;53 }54 for(j = 0;j < n;j ++)55 {56 if(F[j] == 0)57 result += J[j];58 }59 if(m == 0)60 cout<<setiosflags(ios::fixed)<< setprecision(3)<<result<<endl;61 62 //计算一个测试用例的结果63 key = FindMax();64 while(m > 0)65 {66 if(m <= F[key])67 {68 result += Ratio[key] * m;69 cout<<setiosflags(ios::fixed)<< setprecision(3)<<result<<endl;70 m = 0; //准备退出,计算完毕71 }72 else73 {74 result += Ratio[key] * F[key];75 m = m - (int)F[key]; //m减少76 Ratio[key] = 0.0; //更新比例的值77 key = FindMax(); //更新key的值78 }79 }80 81 }82 83 return 0;84 }
0 0
- HDOJ1009
- hdoj1009
- hdoj1009
- hdoj1009
- HDOJ1009
- HDOJ1009
- HDOJ1009
- hdoj1009 贪心
- HDOJ1009 贪心
- hdoj1009解题报告
- HDOJ1009.FatMouse' Trade
- FatMouse' Trade<hdoj1009>
- Hdoj1009 FatMouse' Trade
- HDOJ1009 贪心水题
- hdoj1009 今年暑假不AC
- HDOJ1009 肥鼠的交易
- zoj 2109 || hdoj1009 FatMouse' Trade(贪心)
- hdoj1009 FatMouse' Trade——贪心算法
- 图形学_圆的扫描转换
- 图形学_椭圆扫描转换_中点椭圆算法
- iOS动画特效
- 图形学_多边形扫描转换_边界标志算法
- 图形学_二维图形的剪裁_Sutherland-Hodgeman_Cohen—Sutherland
- HDOJ1009
- javascript 字符串判断是否为空
- HDOJ 1017
- HDOJ 1021 分析
- OpenGL ES 创建流程
- HDOJ 1048
- HDOJ 1076
- EHCache的配置
- QTableWidget排序问题