• 贪心——poj百炼3468:电池寿命


    贪心策略:

    情况一:

    ​ 如果最大的电池寿命大于其他所有的电池寿命之和,ans为其他所有的之和

    情况二:

    ​ 如果最大的电池寿命小于其他所有电池寿命之和 ,ans为所有电池寿命的一半

    情况一很容易证明,比如电池寿命分别为:(a_1, a_2, a_3, ... , a_n), 如果(a_n > sum_{k=1}^{n-1} a_k) 那么就用每一个(a_k (kin[1, n-1]))(a_n) 配对,一直消耗(a_n)。这样就能得到最大的电池寿命:(sum_{k=1}^{n-1} a_k)

    重点是如何证明贪心算法中情况二的正确性:

    #include <iostream>
    #include <cstdlib>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int MAX = 1010;
    int main()
    {
    	int N;
    	int a[MAX];
    	while(cin >> N) {
    		int sum = 0;
    		double ans;
    		memset(a, 0, sizeof(a));
    		for (int i = 0; i < N; ++i) {
    			cin >> a[i];
    			sum += a[i];
    		}
    		sort(a, a+N);
    		sum -= a[N-1];
    		// 如果最大的电池寿命大于其他所有的电池寿命之和,ans为其他所有的之和 
    		if (sum < a[N-1]) {
    			ans = sum;
    		}
    		// 如果最大的电池寿命小于其他所有电池寿命之和 
    		else {
    			ans = (double) (sum+a[N-1]) / (double)2;
    		}
    		printf("%.1f
    ",ans);
     	}
    	return 0;
    }
     
    
  • 相关阅读:
    js中定义变量的三种方式const,val,let 的区别
    jquery中attr和prop的区别
    jQuery prop() 方法
    toFixed()方法
    java中匿名类的讲解
    Java序列化的几种方式以及序列化的作用
    classloader加载过程
    有关java中static关键的重写问题
    java泛型的讲解
    真实的周星星,你了解吗?
  • 原文地址:https://www.cnblogs.com/VanHa0101/p/14015797.html
Copyright © 2020-2023  润新知