先讲解一下如何处理这道题的毒瘤输入。\(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. ZooKeeper-集群模式配置

    (1)下载安装zookeeper,进行基本的配置,详细教程:https://www.cnblogs.com/excellencesy/p/11956485.html (2)在三台虚拟机上分别按照以上方 ...

  2. JSON parse error: default constructor not found. class java.time.YearMonth; nested exception is com.alibaba.fastjson.JSONException: default constructor not found. class java.time.YearMonth

    java8新出的YearMonth可以方便的用来表示某个月.我的项目中使用springmvc来接收YearMonth类型的数据时发现 x-www-from-urlencoded 格式的数据可以使用&q ...

  3. 使用PIE.htc 进行IE兼容CSS3

    步骤: 1.引入文件.注意PIE.htc文件和css文件要放在同一个目录下: 2.在css元素中加上  behavior:url(pie.htc); 3.可以愉快的写css hack啦 ,这时需要的圆 ...

  4. mui下拉刷新 ios click事件无法响应问题

    使用mui的事件监听事件 tap mui("#pullrefresh").on('tap', '.ulDiv', function (event) {this.click();}) ...

  5. 兵贵神速!掌握这10个Python技巧,让你代码工作如鱼得水

    主题 Python 1000个读者心中有1000个哈姆雷特,要问1000个程序员“什么才是最好的语言”,Java.Python.PHP.C++ 也都有自己的位置.但要问编程语言流行指数之王非,那真的非 ...

  6. 洛谷P2758编辑距离(线性DP)

    题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: !皆为小写字 ...

  7. 在Visual Studio 2017中,.NET(C#)通过Oracle.ManagedDataAccess来连接Oracle数据库

    C#如何通过Oracle.ManagedDataAccess来连接Oracle数据库 1.先创建一个项目,鼠标右击项目中的引用,再点击管理NuGet程序包(也可以先下载dll文件,再选添加引用),在搜 ...

  8. STM32cubeMX安装FW_F4容易出错失败的解决办法

    在CUBEMXV5.30安装F4的支持包V1.241的反复失败,无法自动生成代码.后来发现了一种办法: 在stm32的官网下载V1.24.0和en.patch_cubefw_f4.zip(V1.24. ...

  9. Java 基础--移位运算符

    移位运算符就是在二进制的基础上对数字进行平移.按照平移的方向和填充数字的规则分为三种: <<(左移).>>(带符号右移)和>>>(无符号右移). 1.左移 按 ...

  10. 【JavaWeb】导入Excel并进行校验

    一.需要实现的目标 1.界面编写 2.导入表读取表名,进行校验,后台匹配(判断此表的名称是否能够模糊匹配上) 3.确定表存在,读取其中的数据,暂存 4.正则表达式数据校验(判断是否已存在,数据是否符合 ...