首页 > 编程语言 >问题 E: 深入浅出学算法060-友好城市

问题 E: 深入浅出学算法060-友好城市

时间:2024-07-29 10:55:15浏览次数:10  
标签:060 max1 容量 友好城市 城市 深入浅出 int swap

题目描述

有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多。

输入

第1行,一个整数N,表示城市数。

第2行到第n+1行,每行两个整数,中间用一个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。

输出

仅一行,输出一个整数,表示政府所能批准的最多申请数。

样例输入 Copy
7
22 4
2 6
10 3
15 12
9 8
17 17
4 2
样例输出 Copy
4
提示

50% 1<=N<=5000,0<=xi<=10000

100% 1<=N<=2e5,0<=xi<=1e6

哎我写的放在下面了,大家想要的自行复制获取

#include<iostream>
#include<algorithm>
using namespace std;
int a[10001][3];
int b[10001][4];
int main()
{
    int n;
    cin >> n;
    //输入每个友好型城市到数组里面
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i][1] >> a[i][2];
    }
    //把头数小的放前面依次排序,swap是交换两数大小
    for (int i = 1; i <= n; i++)
    {
        for (int j = i + 1; j <= n; j++)
        {
            if (a[j][1] < a[i][1])
            {
                swap(a[i][1], a[j][1]);
                swap(a[i][2], a[j][2]);
            }
        }
    }
    //这里开始处理b数组里的数据,第一个放a数组中的后值,第二个放目前到该数的能容量的最大线路数
    for (int i = 1; i <= n; i++)
    {
        b[i][1] = a[i][2];
        b[i][2] = 1;
    }
    //此处开始动态规划,
    for (int i = n - 1; i >= 1; i--)
    {
        int max1 = 0;
        //max用来记录放新的线路时是否是按照最大的容量来放的,具体自己理解
        for (int j = i + 1; j <= n; j++)
        {
            //从当前数开始如果有比我大的,那么能容量的就多1,并且记录max1为当前最大容量
            if (b[j][1] >= b[i][1] && b[j][2] > max1)
            {
                max1 = b[j][2];
            }
        }
        if (max1 > 0)
        {
            b[i][2] = max1 + 1;
        }
    }
    int k = 1;
    //此处寻找最大值
    for (int i = 1; i <= n; i++)
    {
        if (b[i][2] > b[k][2])
        {
            k = i;
        }
    }
    cout << b[k][2] << endl;
    return 0;
}

我把作者写的看了一下,我改了一下加工了一下,我把多余不要的东西删掉了,其他的思路上面时一致的

参考文献:1169. 【动态规划】友好城市-CSDN博客

标签:060,max1,容量,友好城市,城市,深入浅出,int,swap
From: https://blog.csdn.net/2301_80550438/article/details/140765768

相关文章

  • 深入浅出WebRTC—LossBasedBweV2
    WebRTC同时使用基于丢包的带宽估计算法和基于延迟的带宽估计算法那,能够实现更加全面和准确的带宽评估和控制。基于丢包的带宽估计算法主要依据网络中的丢包情况来动态调整带宽估计,以适应网络状况的变化。本文主要讲解最新LossBasedBweV2的实现。1.静态结构LossBasedBweV2......
  • CF1060F Shrinking Tree
    考虑分别以每个点为根计算概率,可以计算所有边固定了收缩顺序的概率之和后除以\((n-1)!\)即为答案设\(f_{x,i}\)表示在\(x\)的子树内,删除最后\(i\)条边前后根的编号不发生变化的概率和,所求即为\(f_{rt,n-1}\)记当前点为\(v\),父节点为\(u\),因为收缩\((u,v)\)时,之前的......
  • 深入浅出分析最近火热的Mem0个性化AI记忆层
    最近Mem0横空出世,官方称之为PA的记忆层,ThememorylayerforPersonalizedAI,有好事者还称这个是RAG的替代者,Mem0究竟为何物,背后的原理是什么,我们今天来一探究竟。Mem0介绍开源地址:https://github.com/mem0ai/mem0官方介绍为:Mem0providesasmart,self-improvingmemory......
  • 深入浅出C语言指针(基础篇)
    目录引言一、认识指针指针是什么? 二、指针变量和地址1.取地址操作符2.指针变量3.解引用操作符 4.指针变量的大小 三、指针和指针类型1.指针的类型2.指针+-整数3.指针的解引用四、const修饰指针变量 1.const修饰指向的数据2.const修饰指针本身3.const同......
  • 深入浅出WebRTC—DelayBasedBwe
    WebRTC中的带宽估计是其拥塞控制机制的核心组成部分,基于延迟的带宽估计是其中的一种策略,它主要基于延迟变化推断出可用的网络带宽。1.总体架构1.1.静态结构1)DelayBasedBwe受GoogCcNetworkController控制,接收其输入并返回带宽估计值。2)DelayBasedBwe内部使用InterAr......
  • 第三讲:深入浅出的索引上
    目录第三讲:深入浅出的索引上:引入:索引的常见模型:哈希表:结论:有序数组:弊端:二叉搜索树特点:例子:思考:为什么数据库存储使用b+树而不是二叉树“N叉”树例子:笔锋一转InnoDB的索引模型索引维护基于上面的索引维护过程说明,我们来讨论一个案例:小结:补充:问题:第三讲:深入浅出的索引上:引入:......
  • Deepin 20.9在GTX 1060显卡上安装Nvidia 550.100驱动
    1下载对应版本的显卡驱动下载地址:https://www.nvidia.com/Download/index.aspxhttps://www.nvidia.cn/geforce/drivers/https://www.nvidia.cn/drivers/lookup/https://developer.nvidia.cn/cuda-gpushttps://developer.nvidia.com/cudnnwgethttps://cn.download.nvidi......
  • TI-MSPM0G3507外设使用,SPI串口连接ICM20602陀螺仪
    写在前面备战2024电赛,使用到了TI开发板,型号MSPM0G3507,该开发板除文档外,网上资料稀少。现在为大家提供spi连接icm20602陀螺仪的代码,以促共同进步。该代码由逐飞seekfree仓库移植而来,如有侵权请私信联系我删除,谢谢。代码亲测成功,如有bug欢迎评论区指正。头文件ICM20602......
  • 深入浅出 Spring AOP:从原理到实战
    深入浅出SpringAOP:从原理到实战在日常开发中,我们常常需要在不改变原有代码的情况下,为某些方法添加额外的功能,比如日志记录、权限控制、事务管理等。SpringAOP(Aspect-OrientedProgramming,面向切面编程)正是为了解决这一问题而生的。今天,我们将深入探讨SpringAOP的原理,并通过......
  • 深入浅出_指针
    指针指针基本介绍变量在内存中的存储如图中右侧图形表示计算机内存(memory),图形中每一个长条表示一个字节(byte),每一个字节存在对应的一个地址,如左侧0、201、202...209所标注对于典型的现代计算机,1个int类型变量由4个字节表示,1个char类型变量由1个字节表示,1个float类型变量由......