首页 > 编程语言 >YBTOJ 贪心算法合集

YBTOJ 贪心算法合集

时间:2022-08-25 13:23:00浏览次数:51  
标签:int YBTOJ rep read ans push 合集 贪心

奶牛晒衣服

开个堆,记录个时间,每次抠出来堆顶减去 b 再扔回去就做完了。

read(n, a, b);
rep(i, 1, n) read(h[i]);
priority_queue<int> q;
rep(i, 1, n) q.push(h[i]);
int t = 0;
while (q.top() > t * a) {
    t++;
    int x = q.top();
    q.pop();
    // printf("x=%d\n",x);
    x -= b;
    q.push(x);
}
printf("%d", t);

雷达装置

对于每个建筑物,解方程找出能探测到他的最左和最右端点,问题转化为最小区间点覆盖问题。

按 右 端 点 排 序! ! !

按 右 端 点 排 序! ! !

按 右 端 点 排 序! ! !

畜栏预定

按左端点排序,依次扔到堆里,堆里按右端点开小根堆,然后贪心即可。

荷马史诗

哈夫曼树模板。
因为哈夫曼树是从底层往根建的,所以首先你要把他补成一颗完全 k 叉树,这样保证了最优性质。

#define int long long

struct qwq {
    int h, w;
    bool operator<(const qwq &x) const {
        if (w == x.w)
            return h > x.h;
        return w > x.w;
    }
};
priority_queue<qwq> q;
int n, k;
signed main() {
    read(n, k);
    rep(i, 1, n) {
        int x;
        read(x);
        q.push({ 1, x });
    }
    while ((q.size() - 1) % (k - 1)) q.push({ 1, 0 });
    int ans = 0;
    while (q.size() >= k) {
        int w = 0, h = -1;
        rep(i, 1, k) {
            auto it = q.top();
            q.pop();
            w += it.w;
            h = max(h, it.h);
        }
        ans += w;
        q.push({ h + 1, w });
    }
    printf("%lld\n%lld", ans, q.top().h - 1);
}

排队接水

贪心的想,慢的人往后扔,一定最优,一遍sort即可。

砍树问题

题面很丑陋。
但其实 \(h[i] = min(p[i] - p[left(i)],p[right(i)] - p[i])\) 答案就是 \(\sum {(a[i] - h[i])}\)。

出栈问题

维护一个后缀最大值,然后贪心的看,后面有比他大的,就压进来,否则弹出去。

仙人之环

仙人掌,所以可以 dfs 判环。
那么首先断开非环边一定可以增加连通块,断完还有剩余的,就考虑按环从小到大贪心断了。

const int N = 4e6 + 5;
int n, m, k, kk, u, v, tot, ans, num, d[N], st[N];
vector<int> g[N];
void dfs(int u, int fa) {
    d[u] = d[fa] + 1;
    for (int v : g[u]) {
        if (v == fa)
            continue;
        if (!d[v])
            dfs(v, u);
        else if (d[v] < d[u]) {
            if (d[u] - d[v] > 1)
                st[++tot] = d[u] - d[v] + 1, num += d[u] - d[v] + 1;
        }
    }
}
signed main() {
    // freopen("c.in","r",stdin);freopen("c.out","w",stdout);
    read(n, m, k);
    rep(i, 1, m) {
        read(u, v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    rep(i, 1, n) if (!d[i])++ ans, dfs(i, 0);
    if (k <= m - num)
        return printf("%d", k + ans), 0;
    sort(st + 1, st + 1 + tot);
    k -= m - num, ans += m - num;
    rrep(i, tot, 1) {
        if (k >= st[i])
            k -= st[i], ans += st[i] - 1;
        else {
            ans += k - 1;
            printf("%d\n", ans);
            break;
        }
    }
}

标签:int,YBTOJ,rep,read,ans,push,合集,贪心
From: https://www.cnblogs.com/wsxxs/p/16623953.html

相关文章

  • YBTOJ 递推算法合集
    错排问题令\(dp[i]\)表示一个\(i\)的排列的方案数。考虑当前插入一个数\(i\),那么考虑一个位置\(pos\),显然\(pos\)有\(i-1\)种选择假设\(i\)放在了\(......
  • 0基础替换数据:智慧城市可视化大屏模板合集
    听说你还在找智慧城市大屏的模板?这不就来了嘛~! 本文精选了山海鲸可视化的6份智慧城市大屏模板,颜值天花板+高级感拉满!最重要的是只需要将自己的数据替换到模板中去,再将组......
  • 问题合集
    mybatis要写tostring要写构造方法不然给入正确格式数据也会报红......
  • 踩坑合集
    这是关于我的踩坑合集springbootFailedtoconfigureaDataSource:'url'attributeisnotspecifiedandnoembeddeddatasourcecouldbeconfigured.一开始看到......
  • 【HMS core】【FAQ】典型问题合集7
    ​1、【HMScore】【AccountKit】【问题描述】集成华为帐号服务后,登录服务异常,无法获取用户信息,报statusCode为907135001,抓取报错日志:Failedtoreadmetadataforthe......
  • 【付费推广】常见问题合集,客户投放伙伴相关问题FAQ 2
    [问题七]客户投放伙伴子账户如何转为客户投放伙伴主账户?客户投放伙伴子账户可登录华为应用市场付费推广网站,进入首页,提交“申请成为客户投放伙伴”。审核通过后,即可成为客......
  • 【推送服务】【FAQ】Push Ki常见咨询合集7--其它问题
    ​1、推送服务的错误码有哪些?推送服务有客户端错误码和服务端错误码两部分,还记录了开发者们在集成推送服务中遇到的常见错误码,如果这些错误码都不能解决您的问题,请联系技......
  • 最大周长(贪心)
    题意题目链接:https://www.acwing.com/problem/content/4608/数据范围\(3\leqn\leq3\times10^5\)思路首先需要注意的是,这里的距离指的是曼哈顿距离,而不是欧几里......
  • 系统综合集成解决方案
                   ......
  • YbtOJ 「图论」第3章 最短路径
    例题1.单源最短路径dij板子。(w36557658原版dij代码!code#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<algo......