zoukankan      html  css  js  c++  java
  • 挑战程序设计竞赛 2.2章习题 poj 1862 Stripies 贪心

    地址 http://poj.org/problem?id=1862

    题目大意是 输入最多100个数字  每次取出两个数字进行2*sqrt(m1*m2) 并将结果放回到上述数组中
    
    重复该操作,求最后可能得到的最小结果是
    
    输入 第一行输入一个数字N 表示下面输入N个数 接下来N行每行输入一个数字
    
    输出 输出一个数字 即最后可能得到的最小结果

     解答

    因为每次计算的函数为2*sqrt(m1*m2) ,显然整数m1 m2大于等于2 就会变小

    那么我们使用贪心策略 使得大的整数尽可能多次参与操作 这样的结果才会更小

    // ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <iostream>
    #include <queue>
    #include <vector>
    #include <cmath>
    
    
    using namespace std;
    
    
    /*
    Sample Input
    
    3
    72
    30
    50
    Sample Output
    
    120.000
    */
    
    
    const int N = 100;
    
    int n;
    
    int main()
    {
        cin >> n;
        priority_queue <double, vector<double>, less<double> >q;
        for (int i = 0; i < n; i++) {
            double t;
            cin >> t;
            q.push(t);
        }
    
        while (q.size() >= 2) {
            double a = q.top(); q.pop();
            double b = q.top(); q.pop();
            double c = 2 * sqrt(a*b);
            q.push(c);
        }
    
        printf("%.3lf
    ",q.top());
    
    
        return 0;
    }
     
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    导出CSV乱码
    php让一个数组按照另外一个数组的键名进行排序
    电脑没有网
    Android抓包方法(转)
    封装curl的get和post请求
    JavaScript动态加载CSS和JS文件
    压缩视频之后网页上只有声音,没有图像
    php BCMath高精度计算
    非table结构数据导入excel
    如何将页面上的数据导入excel中
  • 原文地址:https://www.cnblogs.com/itdef/p/14601172.html
Copyright © 2011-2022 走看看