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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Eclipse安装Hadoop插件
    (转)Ubuntu14.0.4中hadoop2.4.0伪分布模式配置
    Hadoop--DataNode无法启动
    启动与关闭hadoop
    hadoop中执行命令时发生错误
    strings命令
    Deriving data from ElasticSearch Engine
    elasticsearch data importing
    reading words in your computer and changing to female voice, linux festival text2wave saving wav files
    DDNS client on a Linux machine
  • 原文地址:https://www.cnblogs.com/itdef/p/14601172.html
Copyright © 2011-2022 走看看