有趣有趣~ヾ(✿゚▽゚)ノ真的很有意思的一道dp题!感觉可以提供很多非常有意思的思路~

  现场打的时候考虑了很久,但并没有做出来,主要还是卡在了两个地方:1.考虑到按照端点来进行dp,但没有办法将两个端点绑定(即选择钥匙的决策要同时作用在出发与回来的节点上);2.有一些贡献是需要前后两个队伍共同的决策才能够实现的,也并不会处理……最后的题解完美解决了这两个问题。

  我们可以考虑将两个相邻端点之间能否关门作为贡献加在两个端点所代表的队伍的节点上(点权)。如果左边是出发,右边也是出发,那么将这段的贡献加在左边的节点上;如果左边是回程,右边也是回程,那么将这段的贡献加在右边的节点上。如果左边是回程,右边是出发,则中间这一段的贡献一定会被加入答案中。如果左边是出发,右边是回程,那么中间这段的贡献需要两边均给了钥匙才能获得,我们可以在它们两者之间连一条边,边权为中间的贡献。

  这张图上所有的边我们可以发现构成了一条链(只有一条入边&一条出边且不构成环)。然后我们就可以愉快地dp辣!

  启示是:可以将选/不选的问题抽象成为点&点权,两两之间的关系用边来描述。之后,再考虑序列/树上等等的dp。加油呀!

//代码kuai的题解嘻嘻嘻
#include <bits/stdc++.h>
using namespace std;
#define maxn 2005
#define int long long
int n, m, tot, res, last[maxn];
int id[maxn * ], f[maxn][maxn][], val[maxn];
int w[maxn], vis[maxn], nxt[maxn], rec[maxn];
map <int, int> Map; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void dfs(int u)
{
vis[rec[++ tot] = u] = ;
if(nxt[u]) dfs(nxt[u]);
} signed main()
{
n = read(), m = read();
for(int i = ; i <= n; i ++)
{
int l = read(), r = read();
Map[l] = i * , Map[r] = i * + ;
id[i] = l, id[i + n] = r;
}
sort(id + , id + + n + n);
for(int i = ; i < n * ; i ++)
{
int l = id[i], r = id[i + ];
int ld = Map[l], rd = Map[r];
int a = ld & , b = rd & , len = r - l;
if(a && !b) res += len;
else if(a && b) val[rd >> ] += len;
else if(!a && !b) val[ld >> ] += len;
else if(!a && b)
{
if((ld >> ) == (rd >> )) val[ld >> ] += len;
else last[rd >> ] = ld >> , w[rd >> ] = len;
}
}
for(int i = ; i <= n + n; i ++)
{
int d = Map[id[i]];
if(!(d & ) && !vis[d >> ]) dfs(d >> );
}
memset(f, 0xbf, sizeof(f));
f[n + ][][] = f[n][][] = ;
for(int i = n; i > ; i --, f[i][][] = )
for(int j = (n - i + , m); j > ; j --)
{
f[i][j][] = max(f[i + ][j][], f[i + ][j][]);
if(!last[rec[i]]) f[i][j][] = max(f[i + ][j - ][], f[i + ][j - ][]) + val[rec[i]];
else f[i][j][] = max(f[i + ][j - ][], f[i + ][j - ][] + w[rec[i]]) + val[rec[i]];
}
printf("%lld\n", id[n * ] - id[] - res - max(f[][m][], f[][m][])); return ;
}

【题解】洛谷9月月赛加时赛 —— Never·island的更多相关文章

  1. 【LGR-070】洛谷 3 月月赛-官方题解

    本次免费为大家提供[LGR-070]洛谷 3 月月赛的官方题解,点个赞再走呗! 代码就不上了,大家可以到别的博客上去找找!希望这篇博客能对你有所帮助!

  2. 【洛谷5月月赛】玩游戏(NTT,生成函数)

    [洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...

  3. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  4. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  5. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  6. 洛谷4月月赛R2

    洛谷4月月赛R2 打酱油... A.koishi的数学题  线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...

  7. 洛谷3月月赛 R1 Step! ZERO to ONE

    洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...

  8. 【LGR-054】洛谷10月月赛II

    [LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...

  9. 【LGR-051】洛谷9月月赛

    [LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...

随机推荐

  1. 4 进程间通信Queue [kjuː]

    1.进程间通信-Queue Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信. 说明 初始化Queue()对象时(例如:q=Queue()),若括号中没有指定最大可接收的消息数 ...

  2. div仿textarea可输入

    原本要用textarea,但是后来发现好像只有IE支持textarea里边使用html标签,由于需要在textarea中显示一条横线(<hr />),在网上查了很久,都说textarea是 ...

  3. Qt-Qml-播放视频-失败版-只有声音没有图像

    失败版代码 import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.0 import QtMultimedia ...

  4. 【JAVA】关于java中 类.class.getResource("/").getPath()获取路径有空格的问题

    写了一个web工程,在本地测试正确,但是部署到服务器上就出现错误.原因是读取不到配置文件. 后来从打印出来的文件路径中发现是用Java的class.getResource("/") ...

  5. Python序列及其操作(常见)

    python序列及函数入门认识: 0. 我们根据列表.元组和字符串的共同特点,把它们三统称为什么?    序列,因为他们有以下共同点: 1)都可以通过索引得到每一个元素 2)默认索引值总是从0开始(当 ...

  6. Exact Inference in Graphical Models

    独立(Independence) 统计独立(Statistical Independence) 两个随机变量X,Y统计独立的条件是当且仅当其联合概率分布等于边际概率分布之积: \[ X \perp Y ...

  7. POJ 1269 Intersecting Lines(直线求交点)

    Description We all know that a pair of distinct points on a plane defines a line and that a pair of ...

  8. 常用web资源

    ip相关 新浪:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=220.181.38.110 (不带参数本机) ...

  9. “Hello world!”团队第二周贡献分规则+贡献分数分配结果

    一.贡献规则制定: (1)基础分:9 , 9 , 8 , 7 , 7 , 7 , 6(按在本次编程中承担模块的重要度制定,某一模块重要度的认定通过组内开会讨论决定) (2)会议分:每人没出勤一次会议记 ...

  10. POJ 1995 (快速幂)

    这道题普通做法会发生溢出且会超时,应当用快速幂来求解. 快速幂讲解 #include <cstdio> #include <cmath> using namespace std ...