一次考试的dp题



很明显是dp
看题目的时候我们先进行初步的思考,发现一个性质
一个点时不可能被重复覆盖三次的
很显然,如果一个点被覆盖了3次,这3个覆盖他的区间一定是有一个区间被完全包含的,因为有贡献的左右端点只有两个
这种dp一看就是要按照右端点排序,不然会有严重的后效性无法处理
排完序后还是有后效性,第一维的状态已经很明显了,是选到了第i个区间
看完题解后发现为了后效性的处理第二维一定是和所选区间的最后的元素有关系的
这里就设第二维为区间 [j,r_i] 被覆盖了一次(只能是一次 )
这样就考虑到了这个需要决策的选择的影响处理

这就是最后的dp状态
关于转移
有两种情况,一个是这个区间刚刚卡好,那就之间在这个里面转移,即:
另外一种,r[j]卡在了这个区间的里面,即:
然后就没了
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll read()
{
char c=getchar();int a=0,b=1;
for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;
return a*b;
}
const int N=4001;
int f[N][N],awa[N][N],T,n,m,ans=1<<30;
struct qwq{int l,r,v;}a[N];
bool mmp(qwq a,qwq b)
{
return a.r<b.r;
}
int main()
{
freopen("intervals.in","r",stdin);
freopen("intervals.out","w",stdout);
T=read();
while(T--)
{
ans=(1<<30);
n=read();m=read();
for(int i=1;i<=n;i++)
{
a[i].l=read();
a[i].r=read();
a[i].v=read();
}
sort(a+1,a+n+1,mmp);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f[i][j]=awa[i][j]=(1<<30);
}
}
for(int i=1;i<=n;i++)
{
if(a[i].l==1)
{
for(int j=1;j<=a[i].r;j++)
{
awa[i][j]=f[i][j]=a[i].v;
}
}
for(int j=1;j<i;j++)
{
if(a[j].r+1==a[i].l)
{
f[i][a[i].l]=min(f[i][a[i].l],max(awa[j][a[j].r],a[i].v));
}
if(a[i].l<=a[j].r&&a[j].r<=a[i].r)
{
f[i][a[j].r+1]=min(f[i][a[j].r+1],max(awa[j][a[i].l],a[i].v+a[j].v));
}
}
awa[i][1]=min(awa[i][1],f[i][1]);
for(int j=2;j<=a[i].r;j++)
{
awa[i][j]=min(awa[i][j],min(awa[i][j-1],f[i][j]));
}
if(a[i].r==m)ans=min(ans,awa[i][a[i].r]);
}
if(ans==(1<<30))ans=-1;
printf("%d\n",ans);
}
一次考试的dp题的更多相关文章
- [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)
[BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...
- Codeforces Round #369 (Div. 2)---C - Coloring Trees (很妙的DP题)
题目链接 http://codeforces.com/contest/711/problem/C Description ZS the Coder and Chris the Baboon has a ...
- 4817 江哥的dp题d
4817 江哥的dp题d 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 已知1-N的排列P的LIS(最长上 ...
- 4809 江哥的dp题c
4809 江哥的dp题c 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有两个数x,y,一开始x=1,y= ...
- 4816 江哥的dp题b
4816 江哥的dp题b 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给出两个1-N的随机排列A,B.若 ...
- 4815 江哥的dp题a
4815 江哥的dp题a 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给出一个长度为N的序列A(A1,A ...
- HDU 2577 How to Type(dp题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577 解题报告:有一个长度在100以内的字符串,并且这个字符串只有大写和小写字母组成,现在要把这些字符 ...
- codevs4817 江哥的dp题d
4817 江哥的dp题d 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold [题目描述] Description 已知1-N的排列P的LIS(最长上升子序列)不超 ...
- 古韵之乞巧 题解 dp题
[noip模拟赛1]古韵之乞巧 描述 闺女求天女,更阑意未阑. 玉庭开粉席,罗袖捧金盘. 向月穿针易,临风整线难. 不知谁得巧,明旦试相看. ——祖咏<七夕> 女子乞巧,是七夕的重头戏 ...
- cf1061c 普通dp题
题解见https://blog.csdn.net/godleaf/article/details/84402128 这一类dp题是可以压缩掉一维空间的,本题枚举a1到an,枚举到ai时枚举ai的每个约 ...
随机推荐
- mysql索引优化-01
1.1索引是什么? mysql官方对于索引的定义:可以帮助mysql高效的获取数据的数据结构. mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构给以某种引 ...
- PHP处理模板 cookie优先 检测用户登录
<?php// +----------------------------------------------------------------------// | easy pay [ pa ...
- 基于GPT搭建私有知识库聊天机器人(一)实现原理
1.成品演示 支持微信聊天 支持网页聊天 支持微信语音对话 支持私有知识文件训练,并针对文件提问 步骤1:准备本地文件a.txt,支持pdf.txt.markdown.ppt等 步骤2:上传a.txt ...
- SpringIoc容器之Aware
1 前言 Aware是Spring提供的一个标记超接口,指示bean有资格通过回调样式的方法由Spring容器通知特定的框架对象,以获取到容器中特有对象的实例的方法之一.实际的方法签名由各个子接口确定 ...
- Prometheus-3:一文详解promQL
读前提示: 本文字数较多且紧凑,最好预留15min一次性看完,好营养,易吸收. promQL详解 Prometheus提供了内置的数据查询语言PromQL(全称为Prometheus Query La ...
- Java面试题全集(一)
JDK.JRE.JVM之间的区别 JDK(Java SE Development Kit),Java标准开发包,它提供了编译.运⾏Java程序所需的各种⼯具和资源,包括Java编译器.Java运⾏时环 ...
- Federated Learning004
联邦学习--笔记004 2023.03.13周一 快中期答辩了(3.20),最近甲流高发期 毕设期间,今天学习了联邦学习的一篇论文---Differentially Private Federated ...
- 单行编辑控件不能有多行文本 matlab
单行编辑控件不能有多行文本 matlab 解决方法:双击进入控件,把max参数改2以及以上
- git 访问仓库错误
通过https访问git出现错误, failed: Error in the pull function 尝试将https改为http
- 在Java项目中使用redisson实现分布式锁
Redisson自定义注解实现分布式锁 在Java项目中使用Redission自定义注解实现分布式锁: 添加Redission依赖项:在项目的pom.xml中添加Redission依赖项: <d ...