先讲解一下如何处理这道题的毒瘤输入。\(m\) 和 \(d\) 之间的“/”和“ TO ”都可以用 getchar() 强行吃掉,日期的转换可以用公式 \(s_{m-1} + d\) 表示,其中 \(s\) 是每月日数的前缀和。

int s[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

inline int getid(int month, int day){
return s[month - 1] + day;
} int main(){
...
if(y % 4 == 0 && (y % 100 != 0 || y % 400 == 0))
s[2] = 29;
for(int i = 1; i <= 12; ++i)
s[i] += s[i - 1];
...
}

可以用链式前向星存储预约。对于每一份从 \(i\) 日到 \(j\) 日的预约,建立一条从 \(j\) 到 \(i\) 的边。

如果是 \(k = 1\) 的特殊情况,很容易想到 \(O(r)\) 的动态规划做法:

\(\quad\bullet\) 设 \(dp_i\) 为到 \(i\) 日时的最大收入。

\(\quad\bullet\) \(dp_i = max \left\{ dp_{i - 1}, dp_j + p \cdot (i - j) \right\}\),其中 \(j\) 满足存在自 \(j\) 日到 \(i\) 日的预定。

对于 \(k \neq 1\) 的情况,可以二维 dp。即:

\(\quad\bullet\) \(dp_i\) 是一个大小为 \(k\) 的有序集合,从 \(dp_{i,1}\) 至 \(dp_{i,k}\) 分别表示到 \(i\) 日的前 \(k\) 大收入。

\(\quad\bullet\) \(dp_i = dp_{i - 1} \cup dp ^ \prime _ j\),其中 \(j\) 满足存在自 \(j\) 日到 \(i\) 日的预定,对于\(dp ^ \prime _ j\) 中的每一个元素 \(dp ^ \prime_{j, a}\),有 \(dp ^ \prime_{j, a} = dp_{j, a} + p \cdot (i - j)\)。

显然,所谓的“有序集合”可以用数组模拟,两个有序数列的合并操作可以归并排序。

void merge(int *dest, int *src1, int *src2){
for(int i = 0; i < k; ++i)
*(dest++) = *src1 > *src2 ? *(src1++) : *(src2++);
}

收入为 \(0\) 也是一种可能,不可以在 \(dp_{s_{12}, k} = 0\) 时直接输出 \(-1\)。正确做法如下:

if(dp[s[12]][k - 1] == 0)
std::printf("-1\n");
else
std::printf("%d\n", dp[s[12]][k]);

时间复杂度 \(O(k \cdot r)\)。

洛谷 P6046 [CTSC2000]快乐的蜜月的更多相关文章

  1. 洛谷 P5345: 【XR-1】快乐肥宅

    题目传送门:洛谷 P5345. 很荣幸为 X Round 1 贡献了自己的一题. 题意简述: 给定 \(n\) 组 \(k_i,g_i,r_i\)(\(0\le k_i,r_i<g_i\le 1 ...

  2. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  3. 洛谷1352 CODEVS1380 没有上司的舞会

    洛谷的测试数据貌似有问题,4个点RE不可避 CODEVS可AC —————— 10分钟后追记:在洛谷把数组范围开到10000+就过了 —————— 题目描述 Description Ural大学有N个 ...

  4. 洛谷 p1352 没有上司的舞会 题解

    P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...

  5. 洛谷 P4592: bzoj 5338: [TJOI2018]异或

    题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞 ...

  6. 洛谷P1331海战

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线. 不幸的是因为种种原因,国防海军部仅有很少的 ...

  7. 【洛谷3759】[TJOI2017] 不勤劳的图书管理员(树套树)

    点此看题面 大致题意: 给定一个序列,每个元素有两个属性\(a_i\)和\(v_i\),每次操作改变两个元素的位置,求每次操作后\(\sum{v_i+v_j}[i<j,a_i>a_j]\) ...

  8. 【洛谷】P1032 字串变换

    题目地址:https://www.luogu.org/problemnew/show/P1032 洛谷训练场BFS的训练题呀. “BFS不就是用队列的思想去遍历一切情况嘛.我已经不是小孩子了,我肯定能 ...

  9. P3406 海底高铁 (洛谷)

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

随机推荐

  1. 洛谷 P1981 表达式求值(模拟)

    嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...

  2. JS中的 '+' 号

    当用作单目操作符的时候,+操作符不会对Number类型产生影响.但如果应用在字符串类型上,会将其转换为数字: var a = 25;a =+ a; //对a值没有影响console.log(a); / ...

  3. idea新建项目相关名词意义

    新建项目中的对比 建完之后的项目对比 对比 新建中Artifact的名称对应maven中名字 新建中package的名字对应的是项目中src下package名字 新建中project name的名字对 ...

  4. stl_vector复习

    #include <iostream>#include <vector>#include <algorithm> //for_each#include <ct ...

  5. Vacuum Pump Manufacturer - Vacuum Pump: Prevents Reactive Compound Decomposition Products

    Vacuum packaging has been popular in the industry for a long time. Many large companies have joined ...

  6. JavaSE复习~开发环境的搭建 与 HelloWorld

    JDK的下载 访问Oracle官网,下载jdk,目前来说用的最多的是 8 版本 https://www.oracle.com/technetwork/java/javase/downloads/ind ...

  7. Spring Boot 2.0 新特性

    这是一篇总结文章,主要收集 Spring Boot 2.0 相对于 Spring Boot 1.x 的新特性,本章节并不提供实践性质的源代码.在 Spring Boot 系列文章中会持续退出实践章节. ...

  8. Spring Boot Mybatis 使用教程

    Mybatis 在当下互联网开发环境,十分重要.本章主要讲述 Mybatis 如何使用. 从本系列开始,都需要用到 mysql 数据库 和其他一些参考的数据库.请准备相关环节.本章需要以下环境支撑: ...

  9. php类的魔术方法也就是带下划线的类方法介绍及应用

    001 PHP把所有以__(两个下划线)开头的类方法当成魔术方法,并且这些魔术方法的参数都不能通过引用传递.php的魔术方法有: 002  __construct(), __destruct(), _ ...

  10. PXE无人值守实现批量化自动安装Linux系统

    设想一个场景:假如让你给1000台服务器装系统,你会怎么做?跑去每一台服务器给它安装系统吗?显然不会.. 一.概括 通过网络引导系统的做法可以不必从硬盘.软盘或CD-ROM硬盘,而是完全通过网络来引导 ...