【题解】洛谷P1311 [NOIP2011TG] 选择客栈(递推)
题目来源:洛谷P1311
思路
纯暴力明显过不了这道题
所以我们要考虑如何优化到至多只能到nlogn
但是我们发现可以更优到O(n)
我们假设我们当前寻找的是第二个人住的客栈i
那么第一个人住的客栈肯定在i之前
如果在枚举的时候发现一家客栈满足小于可承受价格
那么这家客栈左边与i客栈颜色相同的都可以视为一种方案
所以我们需要一个数组sum[k]记录到i之前第k种颜色一共有几家客栈
last[k]数组存下第k种颜色在i之前的最后一家客栈(判断满足价格的客栈颜色是否在此这种颜色最后一家位置的后面)
num[k]数组存下第k种颜色到i之前一共有几种可行方案
枚举时每次记录下满足价格的客栈i
观察其位置是否满足大于跟它同色的客栈
如果满足的话num数组更新为sum的值
每次枚举都要更新ans加上当前客栈颜色可行的方案(因为前面的可行的话对此客栈同意可行)sum数组 last数组
代码
- #include<iostream>
- using namespace std;
- #define maxn 55
- int n,m,p,ans,col,cost,temp;
- int sum[maxn],num[maxn],last[maxn];
- int main()
- {
- cin>>n>>m>>p;
- for(int i=;i<=n;i++)
- {
- cin>>col>>cost;
- if(cost<=p) temp=i;//记录满足价格的位置
- if(temp>=last[col]) num[col]=sum[col];//如果大于同色的最后一个客栈位置即可更新
- ans+=num[col];
- last[col]=i;
- sum[col]++;
- }
- cout<<ans;
- }
【题解】洛谷P1311 [NOIP2011TG] 选择客栈(递推)的更多相关文章
- 题解 洛谷P1311 【选择客栈】
可能这做法是最奇葩的ST表 我们枚举k,计算每种色调的客栈各有多少种方法 我们利用一种奇怪的思想:除了不可行的,剩下的都是可行的 所以我们先求出 每种颜色的客栈随机选择两个,一共有多少种结果 接着减 ...
- 洛谷 P1311 【选择客栈】
枚举在那个咖啡店喝咖啡 想要计算咖啡店两侧同色的客栈的对数 枚举i求和(左边第i种颜色的个数*右边第i种颜色的个数) 前缀和+后缀和 f[i][j]f[i][j]f[i][j]表示到第i家客栈及之前颜 ...
- NOIP2011选择客栈[递推]
题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...
- 【洛谷 P5110】 块速递推(矩阵加速,分块打表)
题目链接 掌握了分块打表法了.原来以前一直想错了... 块的大小\(size=\sqrt n\),每隔\(size\)个数打一个表,还要在\(0\text{~}size-1\)每个数打一个表. 然后就 ...
- 洛谷P1192-台阶问题(线性递推 扩展斐波那契)
占坑 先贴上AC代码 回头来补坑 #include <iostream> using namespace std; int n, k; const int mod = 100003; lo ...
- 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)
洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...
- 洛谷 P1311 选择客栈 解题报告
P1311 选择客栈 题目描述 丽江河边有 \(n\) 家很有特色的客栈,客栈按照其位置顺序从 \(1\) 到 \(n\) 编号.每家客栈都按照某一种色调进行装饰(总共 \(k\) 种,用整数 \(0 ...
- 洛谷P1311 [NOIP2011提高组Day1T2]选择客栈
P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...
- 洛谷P1311 选择客栈
P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...
随机推荐
- Redis整合spring总结
一:Redis简介: Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理. 简单来说,它是一个以(key,value)的形式存储数据的数据库. 官网:https://re ...
- vim的多标签
vim支持多标签页,可以在同一窗口同时打开多个文档, 两种方法: vim -d 通过vim --help后发现vim -d相当与vimdiff模式 例子: $ vim -d a.txt b.txt c ...
- Heka 最简单例子
技术人员学习都是从简单例子开始的, Heka的应用也是从简单开始的. 需求: 监控一个日志文件的内容, 在标准输出显示出来. 操作步骤: 使用下载好或者编译好的 heka 已经编译好的 rel ...
- asm demo
出处:https://blog.csdn.net/zhangjg_blog/article/details/22976929 package com.gxf.asm; import org.objec ...
- 在HTML代码中使用freemarker
在HTML代码中使用freemarker 1.freemarker中显示某对象的属性使用${user.name}. 但如果name为null,freemarker就会报错.如果需要判断对象是否为空: ...
- font-size 基准
浏览器的缺省字体为16px: 你可以先将基准字体大小设置为10px; body { font-size: 62.5%; } 然后统一使用 em作为单位 div { font-size: 2.4em; ...
- parted命令
fdisk命令是针对MBR分区进行操作,MBR分区因为自身设计原因,不能处理大于2TB的硬盘,并且只能有4个分区. 针对大于2TB的硬盘,需要采用GPT分区,使用parted命令进行操作 parted ...
- JDBC连接数据库方法的封装,以及查询数据方法的封装
(在上一篇文章中,我们详细的介绍了连接数据库的方法,以及eclipse操作数据库信息的相关方法,在这里我们将主要讲封装.) 主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个 ...
- daemontools检测进程,退出拉起
一.学习的原因: 为了实现在服务异常停止运行后,有一个监控程序能监控到它,并自动重新启动这个服务.以下以tomcat为例子 二.工具supervise Daemontools是一个包含了很多管理Uni ...
- 【Machine Learning】决策树之ID3算法 (2)
决策树之ID3算法 Content 1.ID3概念 2.信息熵 3.信息增益 Information Gain 4. ID3 bias 5. Python算法实现(待定) 一.ID3概念 ID3算法最 ...