RQNOJ 569 Milking Time:dp & 线段问题
题目链接:https://www.rqnoj.cn/problem/569
题意:
在一个数轴上可以摆M个线段,每个线段的起始终止端点给定(为整数),且每个线段有一个分值,问如何从中选取一些线段使得任意两个线段之间的距离大于等于R。每一条线段属于[0,N]。如何选择这些线段,使得分值之和最大?
定义:两线段间的距离 = 相邻端点坐标之差的绝对值
题解:
讲真。。。这里的N真的没用。。。
首先要用左端点从小到大排序。
表示状态:
dp[i] = max score (选了线段i的当前最大分值)
i:选了第i个线段
找出答案:
max dp[i]
如何转移:
枚举在i之前的线段j,判断位置是否合法。
if(lef[i]-rig[j]>=r) dp[i]=max(dp[i],dp[j]+val[i]);
边界条件:
dp[i] = val[i]
至少选上自己。
AC Code:
// state expression:
// dp[i] = max score
// i: ith segment is selected
//
// find the answer:
// max dp[i]
//
// transferring:
// if lef[i] - rig[j] >= r
// dp[i] = max dp[j] + w[i]
//
// boundary:
// dp[i] = w[i]
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_M 1005 using namespace std; struct Segment
{
int lef;
int rig;
int val;
Segment(int _lef,int _rig,int _val)
{
lef=_lef;
rig=_rig;
val=_val;
}
Segment(){}
friend bool operator < (const Segment &a,const Segment &b)
{
return a.lef<b.lef;
}
}; int n,m,r;
int ans;
int dp[MAX_M];
Segment s[MAX_M]; void read()
{
cin>>n>>m>>r;
for(int i=;i<m;i++)
{
cin>>s[i].lef>>s[i].rig>>s[i].val;
}
} void solve()
{
sort(s,s+m);
for(int i=;i<m;i++)
{
dp[i]=s[i].val;
for(int j=;j<i;j++)
{
if(s[i].lef-s[j].rig>=r)
{
dp[i]=max(dp[i],dp[j]+s[i].val);
}
}
}
ans=;
for(int i=;i<m;i++)
{
ans=max(ans,dp[i]);
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}
RQNOJ 569 Milking Time:dp & 线段问题的更多相关文章
- ZOJ 3349 Special Subsequence 简单DP + 线段树
同 HDU 2836 只不过改成了求最长子串. DP+线段树单点修改+区间查最值. #include <cstdio> #include <cstring> #include ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- cf834D(dp+线段树区间最值,区间更新)
题目链接: http://codeforces.com/contest/834/problem/D 题意: 每个数字代表一种颜色, 一个区间的美丽度为其中颜色的种数, 给出一个有 n 个元素的数组, ...
- Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树)
Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树) 题目链接 题意 给定一个nm的矩阵,每行取2k的矩阵,求总 ...
- [P3097] [USACO13DEC] [BZOJ4094] 最优挤奶Optimal Milking 解题报告(线段树+DP)
题目链接:https://www.luogu.org/problemnew/show/P3097#sub 题目描述 Farmer John has recently purchased a new b ...
- POJ1769 Minimizing maximizer(DP + 线段树)
题目大概就是要,给一个由若干区间[Si,Ti]组成的序列,求最小长度的子序列,使这个子序列覆盖1到n这n个点. dp[i]表示从第0个到第i个区间且使用第i个区间,覆盖1到Ti所需的最少长度 对于Si ...
- [USACO2005][POJ3171]Cleaning Shifts(DP+线段树优化)
题目:http://poj.org/problem?id=3171 题意:给你n个区间[a,b],每个区间都有一个费用c,要你用最小的费用覆盖区间[M,E] 分析:经典的区间覆盖问题,百度可以搜到这个 ...
- POJ 3162 Walking Race 树形DP+线段树
给出一棵树,编号为1~n,给出数m 漂亮mm连续n天锻炼身体,每天会以节点i为起点,走到离i最远距离的节点 走了n天之后,mm想到知道自己这n天的锻炼效果 于是mm把这n天每一天走的距离记录在一起,成 ...
- 【uva1502/hdu4117-GRE Words】DP+线段树优化+AC自动机
这题我的代码在hdu上AC,在uva上WA. 题意:按顺序输入n个串以及它的权值di,要求在其中选取一些串,前一个必须是后一个的子串.问d值的和最大是多少. (1≤n≤2×10^4 ,串的总长度< ...
随机推荐
- 关于insert|update|delete注入中的tips
2.updatexml().extractvalue().name_const()函数的使用 3.I’ve noticed some variations in our payload. You ca ...
- Vue2.0 引用 exif.js 实现调用摄像头进行拍照功能以及图片上传功能
vue组件代码 <template> <div> <div style="padding:20px;"> <div class=" ...
- IOS 网络解析
网络解析同步异步 /*------------------------get同步-------------------------------------*/ - (IBAction)GET_TB:( ...
- WINDOWS下的squid
今天写这篇教程目的在于分享自己在WINDOWS主机下配置squid的方法.哪些地方写的不完善或是不完整或是需要修改的地方,大家可以提出.我会第一时间纠正.下面看正文部分.先提条件,您预安装配置squi ...
- intellij 开发webservice
最近项目中有用到WebService,于是就研究了一下,但是关于intellij 开发 WebService 的文章极少,要不就是多年以前,于是研究一下,写这篇博文.纯属记录,分享,中间有不对的地方, ...
- 计算两个GPS坐标点的距离
计算两个GPS坐标点的距离,第一个参数是第一个点的维度,第二个参数是第一个点的经度 http://yuninglovekefan.blog.sohu.com/235655696.html /** * ...
- Ubuntu 14.04lts安装vncserver
之前有在centos上安装过非常多次vncserver,也写过一个centos 7上的安装文档.近来常识了好几次在ubuntu上安装都没有成功,这次最终搞定了.ubuntu自带的桌面是unity.这个 ...
- 如何利用JQuery获取iframe内联框架对象?
parent.$("#iframeID").get(0).contentWindow; 父.$("选择器").get(0).contentWindow; get ...
- 深入Asyncio(四)Coroutines
Coroutines asyncio在3.4版本添加到Python中,但通过async def和await关键字创建coroutines的语法是3.5才加入的,在这之前,人们把generators当作 ...
- iOS项目 -- 模仿花椒直播做的第一层次界面
公最近直播比较火爆,我也跟跟风,自己做一个直播app, 现在打算用金山云直播的,但是去注册的时候,联系那边的工作人员,他们讲使用金山云直播要有公司和他们线下签约才能授权开放直播平台. 怎么办呢?于是我 ...