牛客 流星雨(dp)
链接:https://ac.nowcoder.com/acm/contest/547/D
来源:牛客网
英仙座流星雨(学名Perseids)是以英仙座γ星附近为辐射点出现的流星雨,也称英仙座γ流星雨。每年在7月20日至8月20日前后出现,于8月13日达到高潮。与象限仪座流星雨、双子座流星雨并称为北半球三大流星雨。
暑假到了,又是一个去看流星雨的好季节。
看流星雨最重要的是什么?当然是许愿。
当一颗流星出现时,可以对其许愿。
你一次可以选择一颗流星进行许愿,每一个愿望都需要一定的时间才能说完,而且中间不能有中断。
但是流星的持续时间通常都很短,很难在流星消失之前把自己的一个愿望说完。
你可以朝着新出现的流星接着许上一个未许完的愿望,当且仅当前一颗流星消失的瞬间另外一颗流星同时出现,
你不可以在一颗流星还在出现的时候转向其他的流星,这样流星之神会生气,厄运会降临
现在给你每颗流星出现和结束的时间,问你许一个愿望的最大时长是多少?
输入描述:
第一行一个数n n<=1000000
表示流星的数目
接下来每行2个数字 x,y (0<=x,y<=1001000 )
表示流星出现的时间和结束的时间
输出描述:
一个数字,表示最长可以连续许愿的时间
示例1
输入
复制
3
2 3
2 4
1 2
输出
复制
3
说明
1~4
解析
是一道比较简单的dp
用dp[i]表示i可以延伸到的最小的位置即可
状态转移方程为
dp[app[i].r]=min(dp[app[i].r],dp[app[i].l]);
对结构体排序只要按照(l或者r)从小打大即可
因为每一次状态转移方程用到的l和r都是比当前小的
#include<bits/stdc++.h>
using namespace std;
const int N=1000000+1100;
int dp[N],no[N];
struct node{int l,r;
}app[N];
bool cmp(node a,node b){return a.r<b.r;
}
int main()
{ios::sync_with_stdio(false);int n;cin>>n;for(int i=0;i<n;i++){cin>>app[i].l>>app[i].r;dp[app[i].l]=app[i].l;dp[app[i].r]=app[i].l;}sort(app,app+n,cmp);int mx=0;for(int i=0;i<n;i++) {dp[app[i].r]=min(dp[app[i].r],dp[app[i].l]);mx=max(app[i].r-dp[app[i].r],mx);}cout<<mx<<endl;return 0;
}
java超时版本。。。
package myproject;
import java.io.BufferedReader;
import java.io.*;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
class node implements Comparable<node>
{int l,r;public node(int l,int r) {this.l=l;this.r=r;}public int compareTo(node o) {return this.l-o.l;}}
public class Main {static int N=1000000+1100;static int []dp=new int [N];static node []no=new node [N];//dp[i]表示i最早的起点public static void main(String []args) throws IOException {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String str=br.readLine();int n=Integer.parseInt(str);for(int i=0;i<n;i++) {str=br.readLine();String []s=str.split(" ");int x =Integer.parseInt(s[0]);int y=Integer.parseInt(s[1]);no[i]=new node(x,y);dp[x]=x;dp[y]=x;}Arrays.sort(no,0,n);int max=0;for(int i=0;i<n;i++) {dp[no[i].r]=Math.min(dp[no[i].r],dp[no[i].l]);max=Math.max(no[i].r-dp[no[i].r],max);}System.out.println(max);}
}
牛客 流星雨(dp)相关推荐
- codeforces(牛客网dp专题,排序)
链接:https://ac.nowcoder.com/acm/problem/21314 来源:牛客网 牛牛正在打一场CF 比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码 第i道题的分 ...
- 牛客网dp专题 数位dp
文章目录 数位dp 例题: NC116652 uva11038 How many 0's NC15035 送分了QAQ NC20669 诡异数字 NC20665 7的意志 NC17385 Beauti ...
- 牛客网——流星雨(dp)
链接:https://ac.nowcoder.com/acm/contest/547/D 来源:牛客网 题目描述 英仙座流星雨(学名Perseids)是以英仙座γ星附近为辐射点出现的流星雨,也称英仙座 ...
- 牛客算法周周练2 B Music Problem(DP,抽屉原理,二进制拆分)
链接:https://ac.nowcoder.com/acm/contest/5203/B 来源:牛客网 题目描述 Listening to the music is relax, but for o ...
- 【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)
题目链接:https://ac.nowcoder.com/acm/problem/14248 来源:牛客网 题目描述 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x ...
- 牛客 contest897 C-Latale(树上dp)
题意 N个节点的树,每条边有条权值,问有多少个点对(U,V)(U, V)(U,V),使得UUU到VVV的距离是3的倍数. 思路 dfs1dfs1dfs1处理每个节点包含子树的dis[dis[%3 = ...
- 牛客练习赛34 E little w and Digital Root(数位dp)
title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...
- 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)...
链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- 牛客假日团队赛10 L 乘积最大 (dp,大数)
链接:https://ac.nowcoder.com/acm/contest/1072/L?&headNav=acm&headNav=acm 来源:牛客网 乘积最大 时间限制:C/C+ ...
最新文章
- PNAS顶刊文:情侣分手3个月前就有预兆!聊天记录还能反映分手后遗症
- Hyperledger Fabric SDK Go构建第一个应用
- 中国工程院谭建荣:人工智能应用得再好,最核心的算法不行,创新能力就不行丨MEET2021...
- GDCM:Dicom文件重复的PCDE测试程序
- 组合数据类型练习、英语词频统计
- OpenStack Heat服务介绍 (三)
- [恢]hdu 2147
- pytorch1.7教程实验——DCGAN生成对抗网络
- 学习记录—HTML标签
- 聊天宝解散,多闪、马桶MT还会远吗?| 畅言
- 每天一个linux命令(5):in命令
- Django模板语言(DTL)
- vector容器中是否应该放指针?解决方法
- Python_随笔笔记_Python基础1
- zuul网关,springsecurity认证中心 和 Swagger2 整合遇到的问题
- 服务器维护需要log日志,IBM HTTP server for i的日志维护
- 用汇编语言实现c语言程序例题,C语言详细例题大全
- pta初级题库151-200
- Crossplane - 比 Terraform 更先进的云基础架构管理平台?
- c语言中wait用法及意思,wait的用法总结大全