首页 > 其他分享 >第三个贪心

第三个贪心

时间:2022-10-24 11:02:36浏览次数:54  
标签:cout int sum 第三个 ++ que ans 贪心

A - 汽车加油问题

#include <bits/stdc++.h>
using namespace std;
int a[5010], n, k;

signed main()
{
    cin >> n >> k;
    for (int i = 0; i <= k; i++)
        cin >> a[i];

    for (int i = 0; i <= k; i++)
        if (a[i] > n)
            return cout << "No Solution!", 0;

    int now = 0, ans = 0;
    for (int i = k; i >= 0; i--)
    {
        now += a[i];
        if (now > n)
            ans++, now = a[i];
    }
    cout << ans << endl;
}

B - 多元Huffman编码问题

#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main()
{
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];

    sort(a.begin(), a.end());
    int sum = a[n - 1] + a[n - 2];
    int ans = a[n - 1] + a[n - 2];
    for (int i = n - 3; i >= 0; i--)
        ans += sum + a[i], sum += a[i];
    cout << ans << " ", ans = 0;

    priority_queue<int, vector<int>, greater<int>> que;
    for (int i = 0; i < n; i++)
        que.push(a[i]);
    while (que.size() % (k - 1) != 1)
        que.push(0);

    while (que.size() > k)
    {
        sum = 0;
        for (int j = 0; j < k; j++)
            sum += que.top(), que.pop();

        ans += sum;
        que.push(sum);
    }
    while (que.size())
        ans += que.top(), que.pop();

    cout << ans << endl;
}

E - 最优合并问题

#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main()
{
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];

    sort(a.begin(), a.end());
    int ans = 0, sum = a[n - 1];
    for (int i = n - 2; i >= 0; i--)
        sum += a[i], ans += sum;

    cout << ans - n + 1 << " ";
    ans = 0, sum = a[0];
    priority_queue<int, vector<int>, greater<int>> que;
    for (int i = 0; i < n; i++)
        que.push(a[i]);
    while (que.size() > 1)
    {
        int a = que.top();
        que.pop();
        int b = que.top();
        que.pop();
        que.push(a + b);
        ans += a + b;
    }
    cout << ans - n + 1;
}

F - 区间覆盖问题

#include <bits/stdc++.h>
using namespace std;

signed main()
{
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a.begin(), a.end());

    int now = a[0] + k, ans = 1;
    for (int i = 0; i < n; i++)
        if (a[i] > now)
            now = a[i] + k, ans++;

    cout << ans << endl;
}

标签:cout,int,sum,第三个,++,que,ans,贪心
From: https://www.cnblogs.com/zzh1206/p/16820781.html

相关文章

  • 贪心算法 455
    455.分发饼干classSolution{publicintfindContentChildren(int[]g,int[]s){Arrays.sort(g);//孩子列表Arrays.sort(s);//饼干列表......
  • Madoka and the Sixth-graders (全排列队列,每一个点可以向外连1条线题型+倍增法处理
    题意:Madoka的教室里有 nn 个座位,一开始,编号为 ii 的座位上坐着编号为 b_i(1\leb_i\len)bi​(1≤bi​≤n) 的同学。门外有排成一队的,编号从 n+1n+1 开始的,......
  • Madoka and Childish Pranks (贪心+逆序即可)
    题目大意: 给定一个01矩阵,其中0代表黑色,1代表白色Madoka要对一个同样大小的0矩阵染色,每次染色可以将一个矩形染成国际象棋的颜色(-1)^(x+y)的颜色(1白2黑)现......
  • 每一缕烟火,终会有归宿:写在第三个十月
    是否应该写点什么?——意念告诉我,是的。去年的10月25日,我写了一首词,也是我目前为止写的最后一首词:杨柳池边梦梧桐,春色时节秋风。自古清泪洒相逢,早知轻狂恨,何必任心伤......
  • Scapegoat Gym - 101775B (贪心+推公式)
    题目链接https://vjudge.csgrandeur.cn/problem/Gym-101775B原文题意:现在某人闯祸了,产生了N个锅,每个锅有个严重点数,现在可以安排M个替罪羊去背锅。每个替罪羊最多......
  • 贪心算法
    贪心算法所采用的策略,是保证每次操作都是局部最优,从而使最后结果是全局最优。1.n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,......
  • Snowy Mountain (找规律来贪心+ 多源特殊bfs+根号n)
    题目大意:给定一棵 nn 个点的树,其中每个点可能是黑色或白色。一个点的高度定义为其距离最近黑色节点的距离。你初始在 ii 号节点上,势能为 00,可以做以下两种操作:......
  • 【UOJ 710】魔塔 OL(贪心)(四毛子分块)
    魔塔OL题目链接:UOJ710题目大意有一个三维的网格,点有权值a,b,维护三个操作:加入一个点,删除一个点,把某一个(1,x)(1,y)(1,y)立方体里面的点拿出来,做一次操作的最小初......
  • FZU 2144 Shooting Game (贪心区域划分)
    Problem2144ShootingGameAccept:370Submit:1902TimeLimit:1000mSecMemoryLimit:32768KBProblemDescriptionFatbrotherandMazeareplayingak......
  • 【算法】贪心求解仓库设置位置问题(C++源码)
    【算法】贪心求解仓库设置位置问题(C++源码)​​一、问题描述​​​​二、步骤描述​​​​三、运行结果截图​​​​四、源代码(C++)​​一、问题描述城市街道如下图所示,所有街......