zoukankan      html  css  js  c++  java
  • 【hdoj_2570】迷障

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2570


    思路:贪心法.要求在浓度不超标的情况下,解药的最大体积.由于体积相同,可以先对浓度排序,然后从浓度小的药水开始配制,直到超标的前一次,就可以求出最大体积和对应的不超标的最大浓度.


    注意:根据题目要求,每种药液,要用就得全用,要么不用,即【不能分割】.


    C++代码如下:

    #include<iostream>
    #include<algorithm>
    #include<iomanip>
    using namespace std;
    
    /*
    *由于所有的药水体积相同,所以浓度就与体积无关了,例如两个浓度分别为c1和c2的药水
    *等体积混合,所得药液的浓度就是二者均值,三个浓度不同的药水等体积混合,浓度就是三者均值.
    *所以,只有在最后计算解药的最大体积的时候需要用到这个输入的体积V的值.
    */
    int main(){ int C; cin >> C;//测试组数 while(C--) { int n,V,W;//配药的种类n,每种配药的的体积V,解药允许的最大浓度W cin >> n >> V >> W; int *p = new int[n]; for(int i=0;i<n;i++) cin >> p[i];//输入每种配药的浓度 sort(p,p+n);//按照浓度从小到大排序 double sum = 0;//记录了"浓度"(浓度*100的值*目前所选择的药液种类数) int k;//k的最终值,记录了最终所选择了几种药液 for(k=0;k<n;k++) { if(sum+p[k]<=(k+1)*W)//假设把第k中药液用上,如果"浓度"不超标 sum += p[k];//那就把第k中药液用上 else//如果超标了,那如果用上后面浓度更大的药液更超标 break;//所以退出 } //k值记录了用了几种药液,而每种药液的体积相同 if(k==0) cout << "0 0.00" << endl; else//输出的第一个量为最终解药的体积,是个整数;第二个量为浓度(真正的浓度) cout << k*V << " " << setprecision(2) << fixed << sum / (k*100) << endl; } return 0;}
    
    
    

    上述代码直接提交有错误提示(代码长度不符合要求),删去所有注释提交通过.


    小结:

    1.setprecision用于控制输出几位小数,它加载了#include<iomanip>头文件.它的用法如下:

    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    int main()
    {
        cout << 1.2345 << endl;
        cout << setprecision(2) << fixed << 1.2345 << endl;//对后面的double类型数据有用
        cout << 1.2345 << endl;//同样是double类型数据
        cout << 12345 << endl;//但是,对整型数据不起作用
    	
        return 0;
    }
    
    运行结果如下图:



    2.题目的三个测试数据的药水体积均为V=100,可以改为其他数据进行测试,以免和【百分之xxx】中的100混淆.

  • 相关阅读:
    关于linux下配置python3的virtualenvwrapper
    python-爬图小样
    C++反汇编学习笔记(五)
    C++反汇编学习笔记(四)
    C++反汇编学习笔记(三)
    OllyDebug调试技巧(三)
    C++反汇编学习笔记(二)
    OllyDebug调试技巧(二)
    OllyDebug调试技巧(一)
    PE结构学习笔记(十一)
  • 原文地址:https://www.cnblogs.com/tensory/p/6590762.html
Copyright © 2011-2022 走看看