MAX 的读书计划——dp

2023-10-29

题目描述
MAX 很喜欢读书,为了安排自己的读书计划,他会预先把要读的内容做好标记,A B 表示一个页段,即第 A 到 B 面,当然 A<B,若有两个页段 A-B,B-C,则可以直接记为 A-C,这样,他就可以一次看完,现在告诉你 n 个页段,请你帮他求出最长的一条页段,并输出这条页段的长度和组成它的页段个数。举个例子:
有 6 个页段:
2-7 1-3 3-12 12-20 7-10 4-50
那么连续的页段就有:
1-3,3-12,12-20 长度为 20-1+1=20 由 3 个页段组成
2-7,7-10 长度为 10-2+1=9 由 2 个页段组成
4-50 长度为 50-4+1=47 由 1 个页段组成
那么最长的一条就是第三个,所以结果为 47 1。
需要注意的是:如果有两条不一样的连续的页段长度同时为最大,那么取组成页段数多的一条.
例子: 1-5,5-10,1-10
输出: 10 2
输入
第一行为一个整数n,n<500;
第二行到第n+1行,每行两个整数A,B,记录一个页段的信息。0<=A<B<500
输出
输出一个整数,即最长的页段的长度和组成它的页段数。
样例输入 Copy

7 
1 5 
10 12 
3 10 
2 7 
2 10 
12 16 
7 9 

样例输出 Copy
15 3
提示
1-5 长度为5由1个页段组成
3-10,10-12,12-16 长度为14由3个页段组成
2-7,7-9 长度为8由2个页段组成
2-10,10-12,12-16 长度为15由3个页段组成

所以输出最长的页段的长度即15由3个页段组成

【数据规模】
对于30%的数据n<20,0<=A<B<500
对于100%的数据n<500,0<=A<B<500

动态规划问题
将输入的数据放在结构体里面,顺便统计上长度,后面会用到的
将结构体按照开始的页数升序的顺序排列,然后根据状态转移方程dp[i]=max(dp[i],dp[j]+a[i].len);
len[i]=max(len[i],len[j]+1);
来分别解决长度最大以及页数最大的问题

#include <bits/stdc++.h>
#include <algorithm>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
#define wuyt main
typedef long long ll;
#define HEAP(...) priority_queue<__VA_ARGS__ >
#define heap(...) priority_queue<__VA_ARGS__,vector<__VA_ARGS__ >,greater<__VA_ARGS__ > >
template<class T> inline T min(T &x,const T &y){return x>y?y:x;}
template<class T> inline T max(T &x,const T &y){return x<y?y:x;}
///#define getchar()(p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
///char buf[(1 << 21) + 1], *p1 = buf, *p2 = buf;
ll read(){ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
if(c == '-')Nig = -1,c = getchar();
while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
return Nig*x;}
#define read read()
const ll inf = 1e15;
const ll INF = 0x3f3f3f3f;
const int maxn = 2e6 + 7;
const int mod = 1e9 + 7;
ll gcd(ll a,ll b)
{
    ll t;
    while(b!=0)
    {
        t=a%b;
        a=b;
        b=t;
    }
    return a;
}
ll qPow(ll x, ll k)
{
    ll res = 1;
    while(k) {
        if(k&1)
            res=(res*x);
        k>>=1;
        x=(x*x);
    }
    return res;
}
ll maxx=-1;
ll minn=inf;
ll num2[maxn];
ll num[maxn];
ll res;
int sum=0;
map<string,ll> mp;
vector<ll> vet;
priority_queue <int ,vector<int> ,greater<int> > xiaogen;
queue <ll> duilie;
priority_queue <int ,vector<int> ,less<int> > que;
int judge[maxn];
ll ans[maxn];
struct node{
    int a;
    int b;
    int len;
}a[maxn];
bool cmp(node a,node b){
    return a.a<b.a;
}
int max_len,max_num;
int len[maxn];
int dp[maxn];
int main()
{
    int n=read;
    for(int i=1;i<=n;i++){
        a[i].a=read;
        a[i].b=read;
        a[i].len=a[i].b-a[i].a;
    }
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++){
        dp[i]=a[i].len;
        len[i]=1;
        for(int j=1;j<i;j++){
            if(a[j].b==a[i].a&&dp[j]+a[i].len>dp[i]) {
                dp[i]=dp[j]+a[i].len;
                len[i]=len[j]+1;
            }
            else if(a[j].b==a[i].a&&dp[j]+a[i].len==dp[i]){
                ///dp[i]=dp[j]+a[i].len;
                len[i]=max(len[i],len[j]+1);
            }
        }
        ///cout<<len[i]<<endl;
        ///max_num=max(max_num,dp[i]);
        ///cout<<dp[i]<<endl;
        if(dp[i]>=max_num)
        {
            max_num=dp[i];
            max_len=max(max_len,len[i]);
        }
    }
    printf("%d %d",max_num+1,max_len);
    return 0;
}
/**
7
1 5
10 12
3 10
2 7
2 10
12 16
7 9
**/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MAX 的读书计划——dp 的相关文章

  • P1018 [NOIP2000 提高组] 乘积最大

    题目 题目链接 题解 状态定义 dp i j 表示前i个数分成j段 即需要j 1个 的最大乘积 状态转移 dp i j max dp k 1 j 1 a k i dp i j 表示在第k 1和第k个数之间加上一个 得到的最大值 其中前k 1
  • ECNA 2014 部分题解

    目录 D Generalized Roman Numerals 思维dp E Inspectors 拆点跑最小费用最大流 H Time Warp 模拟 A Cure for the Common Code KMP D Generalized
  • Research Productivity Index-概率dp

    题目描述 Angela is a new PhD student and she is nervous about the upcoming paper submission deadline of this year s research
  • 【动态规划】62. 不同路径

    62 不同路径 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 问总共有多少条不同的路径 示例 1 输入 m 3
  • Tree with Maximum Cost---CF1092F 树上DP

    F Tree with Maximum Cost time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstand
  • LeetCode-410.分隔数组的最大值、动态规划、前缀和

    给定一个非负整数数组和一个整数 m 你需要将这个数组分成 m 个非空的连续子数组 设计一个算法使得这 m 个子数组各自和的最大值最小 示例 输入 nums 7 2 5 10 8 m 2 输出 18 力扣 LeetCode 第410题 前言
  • 全排列的价值 python实现 蓝桥杯 2137

    问题描述 对于一个排列 A a1 a2 an 定义价值 ci 为 a1 至 ai 1 中小于 ai 的数 的个数 即 ci aj j
  • leetcode买卖股票的最佳时机含手续费

    动态规划简单题 我们设置二维数组dp size 2 其中dp i 0 代表第i 天不持有股票的最大价值 其中dp i 1 代表第i天持有股票的最大价值 当天持有股票可以从前一天持有股票和前一天不持有股票现今买入转换得来 当天不持有股票可以从
  • APAC 2013 部分题解

    目录 A The Alphabet Sticker C Increasing Shortest Path D Cup of Cowards E Balloons Colors F NASSA s Robot G The Stones Gam
  • [Codeforces 1579G] Minimal Coverage

    You are given n lengths of segments that need to be placed on an infinite axis with coordinates The first segment is pla
  • 动态规划记录 [动态更新]

    2021 江西省赛A 题目链接 https ac nowcoder com acm contest 21592 A 题意 给出一个布尔矩阵 每个位置的值非零即一 然后问给定p和q 问从 1 1 n m 的所有路径中至少通过p次0 q次1的路
  • LeetCode-312.戳气球、动态规划

    有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 如果你戳破气球 i 就可以获得 nums left nums i nums right 个硬币 这里的 left 和
  • Leetcode 376.摆动序列

    题目 如果连续数字之间的差严格地在正数和负数之间交替 则数字序列称为 摆动序列 第一个差 如果存在的话 可能是正数或负数 仅有一个元素或者含两个不等元素的序列也视作摆动序列 例如 1 7 4 9 2 5 是一个 摆动序列 因为差值 6 3
  • 动态规划之完全背包问题

    完全背包问题 题目 有 N N N 种物品和一个容量为 V V V 的背包 每种物品都有无限件可用 放入第 i
  • 左孩子右兄弟 蓝桥杯1451 python

    题目描述 对于一棵多叉树 我们可以通过 左孩子右兄弟 表示法 将其转化成一棵二叉树 如果我们认为每个结点的子结点是无序的 那么得到的二叉树可能不唯一 换句话说 每个结点可以选任意子结点作为左孩子 并按任意顺序连接右兄弟 给定一棵包含 N 个
  • 拿金币 蓝桥杯

    问题描述 有一个N x N的方格 每一个格子都有一些金币 只要站在格子里就能拿到里面的金币 你站在最左上角的格子里 每次可以从一个格子走到它右边或下边的格子里 请问如何走才能拿到最多的金币 输入格式 第一行输入一个正整数n 以下n行描述该方
  • 最短Hamilton路径

    题目 题目链接 题解 状压dp f i j 表示从0点按照路径i走到j点的最短距离 其中i为二进制数 1表示走过某点 0表示未走过某点 比如10010表示经过了1 4两个点 而不经过0 2 3点 状态转移为 假设沿路径i走到j点经过k点 且
  • LeetCode338. 比特位计数

    题目连接 https leetcode cn com problems counting bits 解题思路 这道题需要计算从 0 到 num 的每个数的二进制表示中的 1 的数目 最直观的方法是对每个数直接计算二进制表示中的 1 的数目
  • 斐波那契数列——UPC

    题目描述 斐波那契数列F满足如下性质 F1 1 F2 2 Fi 2 Fi 1 Fi 对于一个正整数n 它可以表示成一些不同的斐波那契数列中的数的和 你需要求出 有多少种不同的方式可以表示出n 输入 输入有多组数据 第一行为一个整数T 表示数
  • UVa 1347 Tour

    题目 Tour 题意 来自luogu John Doe想用最小的路程游览完所有目的地 每个目的地都用坐标xi yi表示 任何两目的地的xi都不相同 两目的地之间的路程是两点之间的直线距离 John是这样走的 他从最左边的点开始 然后只能向右

随机推荐

  • 三元运算符

    用来完成简单的选择逻辑 即根据条件判断 从两个选择中选择一种执行 使用格式 条件表达式 表达式1 表达式2 运算规则 a 判断条件表达式 结果为一个布尔值 b true 运算结果为表达式1 c false 运算结果为表达式2 如 int a
  • Python3/Python2百度网盘链接地址

    Python3 Python2百度网盘链接地址 Python官网登录不上 Python下载太慢 我已经把Python的安装包下载好并上传百度网盘 链接 https pan baidu com s 1QPMUb4GlsOXLLGgJg0lPe
  • php socket error 111,php中的socket_connect上的“连接被拒绝”错误

    我试图将一些代码从perl转换为php Perl代码如下所示 my handle Connect port host 我试图使用socket在PHP中做同样的事情 我试过socket create和socket connect socket
  • js关闭当前页面刷新父页面

    在子页面添加监测弹出页面的关闭事件 然后刷新父页面就行了 window onbeforeunload function 这里刷新方法有很多 具体要看你的子窗口是怎样出来的 window opener location reload pare
  • HIVE sql经典50题

    表及数据 1表 学生表 create table student s id int s name string dt string sex string row format delimited fields terminated by t
  • wsl里linux密码忘记怎么办,Linux Bash on Win10 (WSL) 忘记密码解决

    win10 一周年版刚发布时就升级了 顺便也就装了linux bash on win10 但一直没有用就把root密码忘记了 今天终于在微软论坛上找到了解决方法 1 C userprofile AppData Local lxss root
  • 网络编程基础

    文章目录 简介 实现网络通信的要素 IP地址 测试 IP 的一些方法 端口 端口的分类 测试方法 通信协议 TCP 与 UDP 对比 TCP 用户传输协议 打电话 UDP 用户数据报协议 发短信 TCP 实现聊天 TCP 实现文件上传 UD
  • 【Linux】系统api和指令的模拟实现

    文章目录 1 虚拟地址空间 1 1一个进程打开的最大文件数量 2 stat文件信息函数 2 1stat参数和返回值 2 实现简单版ls l 对单文件操作 2 1获取文件类型 2 2获取连接数 2 3获取用户名和所有组 2 4获取时间 2 5
  • TensorFlow项目练手(二)——猫狗熊猫的分类任务

    项目介绍 通过猫狗熊猫图片来对图片进行识别 分类出猫狗熊猫的概率 文章会分成两部分 从基础网络模型 gt 利用卷积网络经典模型Vgg 基础网络模型 基础的网络模型主要是用全连接层来分类 比较经典的方法 也是祖先最先使用的方法 目前已经在这类
  • 十四五双碳双控时代下的“低碳认证”

    目录 前言 十四五双碳双控时代下的 低碳认证 一 关于 低碳认证 二 低碳认证优势 三 环境产品认证EPD 四 EPD相关运营机构 五 碳中和相关机构 六 EPD的认证流程 七 低碳产品认证认证流程和要求 八 相关机构认证证书样例 九 证书
  • 从‘discover.partitions‘=‘true‘分析Hive的TBLPROPERTIES

    从 discover partitions true 分析Hive的TBLPROPERTIES 前言 Hive3 1 2先建表 show databases use db lzy show tables create external ta
  • 语音网关1(T1/E1 总结)

    IP 包含signal and media and Legacy voice 国内 digital 用 E1 PRI 30B D 国外 T1 模拟 fxs fxo fxs接终端 fxo 接局端 ISDN 两种接口 BRI 基本数率接口 64
  • Android Studio ConstraintLayout约束布局使用学习笔记(二)参数使用

    自己学习约束布局的笔记 上接Android Studio ConstraintLayout约束布局使用学习笔记 一 熟悉工具 wrap constraint自适应大小 根据约束调整大小 当水平上不受约束的布局 选择wrap constrai
  • 数据库-5-访问数据库的程序

    ch05 访问数据库的程序 1 嵌入式SQL ESQL Embedded SQL 1 1 为什么要引入ESQL 1 2 C语言中的嵌入式SQL 1 3 ESQL和ISQL的语法不同 1 4 ESQL编程的步骤 1 4 1 声明部分 1 4
  • 免费分享: MySQL零基础入门教程!

    免费分享 MySQL零基础入门教程 目前MySQL已经成为最为流行的开源关系数据库系统 并且一步一步地占领了原有商业数据库的市场 可以看到Google Facebook Yahoo 网易 久游等大公司都在使用MySQL数据库 甚至将其作为核
  • Vue3带来了什么

    目录 性能方面的优化 更好的TypeScript集成 用于处理大规模用例的新API 分层内部模块 CompositionAPI 更多RFC 提供的两个新功能 proxy代替defineProperty 双向绑定 性能方面的优化 首先是相对V
  • Java Stream 常用数组类型转换用法

    业务目前经常会使用的stream流来处理数据 特别是对数组的类型进行转换 下面我分类总结常用的转换用法 1 字符串数组 数值型数组 int Long Double String str new String 1 2 3 4 5 6 int
  • mysql导出表结构到excel

    命令 SELECT TABLE NAME 表名 COLUMN NAME 列名 COLUMN TYPE 数据类型 DATA TYPE 字段类型 CHARACTER MAXIMUM LENGTH 长度 IS NULLABLE 是否为空 COLU
  • 【学习笔记】抽象队列同步器AQS应用之BlockingQueue详解

    文章目录 什么是AQS框架 Aqs核心源码 基于aqs实现的锁 BlockingQueue ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 多线程生产者
  • MAX 的读书计划——dp

    题目描述 MAX 很喜欢读书 为了安排自己的读书计划 他会预先把要读的内容做好标记 A B 表示一个页段 即第 A 到 B 面 当然 A