一次考试的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的每个约 ...
随机推荐
- 前端学习C语言 - 初级指针
初级指针 本篇主要介绍:指针和变量的关系.指针类型.指针的运算符.空指针和野指针.指针和数组.指针和字符串.const 和指针.以及gdb 调试段错误. 基础概念 指针是一种特殊的变量.存放地址的变量 ...
- Ubuntu系统字体命令和字体的安装
本人使用的是Windows 10下的WSL,Linux版本是Ubuntu18.04,系统原始是没有安装任何字体的,mkfontscale.mkfontdir和fc-cache命令也是不存在的,直接运行 ...
- Python读取本地文件时出现错误UnicodeDecodeError
Python读取本地文件时出现错误UnicodeDecodeError: 'gbk' codec can't decode byte 0x94 in position 5702: illegal mu ...
- python datetime.now() 的问题
python中,获取指定日期格式的时间可以用 datetime.datetime.now().strftime("%Y-%m-%d") 定义函数的时候,是可以设置参数的默认值的. ...
- 暗黑2能用Java开发?还能生成APP?
最近烧哥发现个宝藏项目,竟然用Java开发了暗黑2出来. 众所周知,暗黑2是暴雪开发的一款经典游戏,距今虽有20多年,仍然有很多粉丝. 粉丝延续热情的方式有很多,一种是做Mod,比如魔电,对怪物.技能 ...
- .NET表达式树
IQueryable/IQueryable 和表达式树 IQueryable有两个组件 Expression:当前查询的组件的与语言和数据源无关的表示形式,以表达式树的形式表示. Provider:L ...
- grafana 容器无法启动,打印权限问题
报错日志 open /var/lib/grafana/alerting/1/notifications: permission denied 问题原因 sudo chown -R docker: /v ...
- 如何用IoT边缘连接器实现云端应用控制PLC?
本文分享自华为云社区<数字工厂深入浅出系列(十):IoT边缘连接器实现云端应用控制PLC>,作者: 云起MAE. 通过IoT云平台和边缘计算的技术设施,工厂可以将PLC等OT过程制造控制器 ...
- [python]为指定目录下的文件名批量加前缀
前言 功能描述:批量重命名指定目录下的文件,文件名加前缀,默认格式为"目录名_原文件名". 示例代码 import argparse import os import sys im ...
- 《深入理解Java虚拟机》读书笔记:垃圾收集器
垃圾收集器 HotSpot虚拟机包含的所有收集器如图3-5所示.图3-5展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用. 新生代收集器:Serial.ParNew ...