zoukankan      html  css  js  c++  java
  • Charge-station HDU

    charge-station HDU - 4435

    题意:平面内有(n)个点,编号为(1-n)。第(i)个点建加油站的花费为(2^{i-1})。车加满油后可以走的路程为(d)。现在要从(1)点开始可重复的走过所有点,问建造加油站的最小花费。

    题解:因为第(n)个点建加油站的花费大于前面所有点花费的总和。可以假设初始都建加油站,贪心地从第(n)个点到第(1)个点,考虑去掉该点的加油站,判图是否联通。如果不联通则保留该点加油站。

    代码:

    #include <bits/stdc++.h>
    #define fopi freopen("in.txt", "r", stdin)
    #define fopo freopen("out.txt", "w", stdout)
    using namespace std;
    typedef long long LL;
    const int maxn = 130 + 100;
    const int inf = 0x3f3f3f3f;
    const double eps = 1e-6;
    
    int n, d, vis[maxn], ans[maxn], flag[maxn];
    int x[maxn], y[maxn];
    
    int dist(int a, int b) {
        return (int)ceil(hypot(x[b]-x[a], y[b]-y[a]) - eps);
    }
    
    void dfs(int x) {
        vis[x] = 1;
        for (int i = 1; i <= n; i++) if (!vis[i]){
            int l = dist(x, i);
            if (ans[x] && ans[i] && l <= d) dfs(i);
            else if ((ans[x] || ans[i]) && l*2 <= d) dfs(i);
        }
    }
    
    bool check() {
        memset(vis, 0, sizeof(vis));
        dfs(1);
        for (int i = 1; i <= n; i++)
            if (!vis[i]) return false;
        return true;
    }
    
    int main() {
        //fopi;
    
        while(~scanf("%d%d", &n, &d)) {
            for (int i = 1; i <= n; i++)
                scanf("%d%d", &x[i], &y[i]), ans[i] = 1;
    
            if (!check()) {
                printf("-1
    ");
                continue;
            }
    
            for (int i = n; i >= 2; i--) {
                ans[i] = 0;
                if (!check()) ans[i] = 1;
            }
    
            for (int i = n, cnt = 0; i >= 1; i--)
                if (cnt = (ans[i] ? cnt+1:cnt)) printf("%d", ans[i]);
            puts("");
        }
    }
    
  • 相关阅读:
    网络编程--requests模块
    python连接oracle--cx_Oracle模块
    操作excel
    操作mysql数据库
    枚举--enumerate
    邮箱
    匿名函数
    使用spring security jwt 、spring security oauth2权限控制遇到的坑记录
    基于element-ui定义自己的Menu 菜单组件并以component方式去定渲染
    VUE同域情况下父窗体打开子窗口,关闭子窗口时刷新父窗体
  • 原文地址:https://www.cnblogs.com/ruthank/p/11365942.html
Copyright © 2011-2022 走看看