zoukankan      html  css  js  c++  java
  • 贪心,区间覆盖问题 Watering Grass UVA

    思路:贪心策略,对每个区间进行排序,然后先总的全区间为(0,0),然后,对区间不断的更新操作。每次只要去相对上的最大区间即可。

    #include<iostream>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn = 10010;
    double l, w;
    pair<double, double>a[maxn];
    int n;
    int main(){
        while (cin >> n >> l >> w){
            int m = 0;
            for (int i = 0; i < n; ++i)
            {
                double x, r;
                cin >> x >> r;
                if (w>2 * r)continue;
                double temp = sqrt(r*r - w*w / 4);
                a[m++] = make_pair(x - temp, x + temp);        //计算区间
            }
            sort(a, a + m);
            double low = 0, up = 0;
            int cnt = 0;
            bool flag = 0;
            for (int i = 0; i < m; ++i)
            {
                if (a[i].first>up){ break; }        //保证新的区间与总的区间有交集
                if (a[i].second > up){
                    for (int j = i; j < m&&a[j].first <= low;++j)
                    if (a[j].second>up){
                        up = a[j].second;        //更新总的区间
                    }
                    cnt++;
                    if (up >= l){
                        flag = 1;
                        break;
                    }
                    low = up;
                }
            }
            cout << (flag ? cnt : -1) << endl;
        }
    }
  • 相关阅读:
    日期时间插件
    QQ在线客服
    dede轮播图
    Animation 案例解释
    transition Css3过度详解
    解决文字无法缩小的问题
    DEDE函数
    hdu 3435 图回路分割
    HDU 4183
    hdu 1569 最小割
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10909023.html
Copyright © 2011-2022 走看看