首页 > 编程语言 >21-24贪心算法

21-24贪心算法

时间:2024-12-01 23:22:14浏览次数:9  
标签:24 end 21 int vector dt include 节点 贪心

21贪心算法

22活动安排问题

究其本质,是一个最大不相交区间问题,要写出具体数量以及的几个

点击查看代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N  = 100010;
//保存区间
vector<vector<int>> a(N,vector<int>(2,0));
int n;

int main()
{
    cin >> n;
    //读入区间
    for(int i = 0; i< n; i++)
    {
        int l, r;
        cin >> l >> r;
        a[i][0] = l;
        a[i][1] = r;
    }
    // 按右端点排序
    sort(a.begin(), a.begin() + n, [](vector<int> &a, vector<int> &b){return a[1] < b[1];});
    // res 保存答案,end 是当前选的点
    int res = 0, end = -1e9 - 10;
    // 遍历区间
    for(int i = 0; i < n; i++)
    {
        // 如果当前选的点覆盖了该区间,则跳过
        if(end >= a[i][0] && end <= a[i][1]) 
            continue;
        else
        {
            // 选的点+1, 选的点更新为区间右端点
            res++;
            end = a[i][1];
        }
    }
    cout << res;
    return 0;
}

23最小生成树

点击查看代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N = 510;
int g[N][N];//存储图
int dt[N];//存储各个节点到生成树的距离
int st[N];//节点是否被加入到生成树中
int pre[N];//节点的前去节点
int n, m;//n 个节点,m 条边

void prim()
{
    memset(dt,0x3f, sizeof(dt));//初始化距离数组为一个很大的数(10亿左右)
    int res= 0;
    dt[1] = 0;//从 1 号节点开始生成 
    for(int i = 0; i < n; i++)//每次循环选出一个点加入到生成树
    {
        int t = -1;
        for(int j = 1; j <= n; j++)//每个节点一次判断
        {
            if(!st[j] && (t == -1 || dt[j] < dt[t]))//如果没有在树中,且到树的距离最短,则选择该点
                t = j;
        }

        //2022.6.1 发现测试用例加强后,需要判断孤立点了
        //如果孤立点,直返输出不能,然后退出
        if(dt[t] == 0x3f3f3f3f) {
            cout << "impossible";
            return;
        }


        st[t] = 1;// 选择该点
        res += dt[t];
        for(int i = 1; i <= n; i++)//更新生成树外的点到生成树的距离
        {
            if(dt[i] > g[t][i] && !st[i])//从 t 到节点 i 的距离小于原来距离,则更新。
            {
                dt[i] = g[t][i];//更新距离
                pre[i] = t;//从 t 到 i 的距离更短,i 的前驱变为 t.
            }
        }
    }

    cout << res;

}

void getPath()//输出各个边
{
    for(int i = n; i > 1; i--)//n 个节点,所以有 n-1 条边。

    {
        cout << i <<" " << pre[i] << " "<< endl;// i 是节点编号,pre[i] 是 i 节点的前驱节点。他们构成一条边。
    }
}

int main()
{
    memset(g, 0x3f, sizeof(g));//各个点之间的距离初始化成很大的数
    cin >> n >> m;//输入节点数和边数
    while(m --)
    {
        int a, b, w;
        cin >> a >> b >> w;//输出边的两个顶点和权重
        g[a][b] = g[b][a] = min(g[a][b],w);//存储权重
    }

    prim();//求最下生成树
    //getPath();//输出路径
    return 0;
}

24哈夫曼编码


标签:24,end,21,int,vector,dt,include,节点,贪心
From: https://www.cnblogs.com/RedSenior/p/18577458

相关文章

  • # 学期(2024-2025-1) 学号(20241420) 《计算机基础与程序设计》第10周学习总结
    学期(2024-2025-1)学号(20241420)《计算机基础与程序设计》第10周学习总结作业信息这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<计算机科学......
  • 2024-2025-1 20241406 刘书含《计算机基础与程序设计》第十周学习总结
    一·教材内容学习《计算机科学概论》第14章1.模拟与离散事件模拟:使用计算机模型来模拟现实世界的过程或系统。离散事件模拟:详细阐述离散事件模拟的原理和方法,包括如何定义事件、时间推进、状态更新等关键步骤,关注于模拟随时间发生的离散事件,如排队系统中顾客的到达和服务。2.......
  • 2024年11月文章一览
    2024年11月编程人总共更新了21篇文章:1.2024年10月文章一览2.《使用Gin框架构建分布式应用》阅读笔记:p307-p3923.《使用Gin框架构建分布式应用》阅读笔记:p393-p4374.《使用Gin框架构建分布式应用》读后感5.《Django5ByExample》阅读笔记:p1-p166.《Django5ByExample》阅......
  • 2024-2025-1 20231309《计算机基础与程序设计》第九周助教总结
    课程答疑现阶段,大家都主要在学习C语言编程,时不时会遇到程序不会写,报错不会改的问题。而出现此类问题的主要原因包括:算法不熟悉,如写不出素数的判断等解决方案:多熟悉学习常见的简单算法包括比大小,判断素数等语法不熟悉,如赋值和判断语句等解决方案:多熟悉课本和PPT相关内......
  • NOIP2024游记
    NOIP2024游记第三次参加NOIP了,但是是第一次正式参加。Day0考前一天我们三点半就放学了,然后打了两个小时排球,回去很累了,摆了一晚上。然后快要睡觉了,我又突然想起来打了个网络流的板子。最后差不多在22:40睡觉了,睡眠质量还不错。Day1早上6:30就醒了,但是由于比较紧张,后......
  • 高级java每日一道面试题-2024年12月01日-JVM篇-你知道哪些JVM性能调优参数?
    如果有遗漏,评论区告诉我进行补充面试官:你知道哪些JVM性能调优参数?我回答:在Java高级面试中,JVM性能调优是一个非常重要的主题。了解JVM的性能调优参数可以帮助你更好地管理和优化应用程序的性能。以下是一些常见的JVM性能调优参数及其详细解释:1.堆内存相关参数-Xms......
  • 高级java每日一道面试题-2024年11月30日-JVM篇-Minor GC(年轻代GC)在什么时候发生?
    如果有遗漏,评论区告诉我进行补充面试官:MinorGC(年轻代GC)在什么时候发生?我回答:在Java高级面试中,关于MinorGC(也称为YoungGC或ScavengeGC)何时发生的问题,是一个重要的考点。以下是对MinorGC触发条件的详细解释:一、MinorGC的基本概念MinorGC是Java虚拟机(JVM)中一......
  • 20222303 2024-2025-2 《网络与系统攻防技术》实验七实验报告
    1.实验内容应用SET工具,通过多步操作建立冒名网站,获取登录信息。利用ettercap实施DNSspoof攻击,篡改特定网站IP。结合两种技术,用DNSspoof引导访问至冒名网站。2.实验过程2.1简单应用SET工具建立冒名网站输入命令sudovi/etc/apache2/ports.conf查看本机apache......
  • 2024-12-01:单面值组合的第 K 小金额。用go语言,给定一个整数数组 coins,表示不同面值的
    2024-12-01:单面值组合的第K小金额。用go语言,给定一个整数数组coins,表示不同面值的硬币,同时给出一个整数k。你可以使用任意数量的这些硬币,但不能将不同面值的硬币组合在一起。请返回可以用这些硬币构成的第k个最小金额。1<=coins.length<=15。1<=coins[i]<=2......
  • ubuntu24.04系统gnome46用到扩展
    现放一张桌面截图:从左到右侧分别是如下扩展:1、logo-activities   通过他可以添加活动图标2、ApplicationsMenu 应用程序菜单3、PlacesStatusIndicator 目录位置4、FavoriteAppsMenu  应用程序菜单,这个我主要用来装饰5、AstraMonitor   Gnome状态栏中......