题目来源:洛谷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] 选择客栈(递推)的更多相关文章

  1. 题解 洛谷P1311 【选择客栈】

    可能这做法是最奇葩的ST表 我们枚举k,计算每种色调的客栈各有多少种方法  我们利用一种奇怪的思想:除了不可行的,剩下的都是可行的 所以我们先求出 每种颜色的客栈随机选择两个,一共有多少种结果 接着减 ...

  2. 洛谷 P1311 【选择客栈】

    枚举在那个咖啡店喝咖啡 想要计算咖啡店两侧同色的客栈的对数 枚举i求和(左边第i种颜色的个数*右边第i种颜色的个数) 前缀和+后缀和 f[i][j]f[i][j]f[i][j]表示到第i家客栈及之前颜 ...

  3. NOIP2011选择客栈[递推]

    题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...

  4. 【洛谷 P5110】 块速递推(矩阵加速,分块打表)

    题目链接 掌握了分块打表法了.原来以前一直想错了... 块的大小\(size=\sqrt n\),每隔\(size\)个数打一个表,还要在\(0\text{~}size-1\)每个数打一个表. 然后就 ...

  5. 洛谷P1192-台阶问题(线性递推 扩展斐波那契)

    占坑 先贴上AC代码 回头来补坑 #include <iostream> using namespace std; int n, k; const int mod = 100003; lo ...

  6. 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)

    洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...

  7. 洛谷 P1311 选择客栈 解题报告

    P1311 选择客栈 题目描述 丽江河边有 \(n\) 家很有特色的客栈,客栈按照其位置顺序从 \(1\) 到 \(n\) 编号.每家客栈都按照某一种色调进行装饰(总共 \(k\) 种,用整数 \(0 ...

  8. 洛谷P1311 [NOIP2011提高组Day1T2]选择客栈

    P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...

  9. 洛谷P1311 选择客栈

    P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...

随机推荐

  1. SQL语句整理(二) 数据定义语言DDL

    前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...

  2. csharp: Aspose.Words create table

    /// <summary> /// 20141118 /// Geovin Du /// Aspose.Words创建表 /// </summary> /// <para ...

  3. webapp 的简单开发

    web app 的技术平台很多,如adobe phonegap.sencha touch.appcan(国产).dcloud(国产)平台.我选择了dcloud平台,原因:简单,容易上手. web ap ...

  4. Python基础-继承与派生

    一.继承 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继承 class P ...

  5. 01_dubbo实例_服务分组

    [为什么要服务分组?] 当一个接口有多种实现时,可以用group区分. [ Provider 的配置信息] <?xml version="1.0" encoding=&quo ...

  6. 04_dubbo_ioc

    [dubbo的IOC实现方法] dubbo的IOC具体实现在:T injectExtension( T instance )方法中,该方法在3个地方被使用: ExtensionLoader.getEx ...

  7. 【阿里云产品公测】在ACE上部署WP测试体验

      ACE服务其实已经有很多类似的服务提供商了,无论收费的还是免费的,  但是到现在为止还没有体验过,正好借着这次机会,来体验一下阿里云的ACE服务. ' !2NSv   /IQ$[WR cx   B ...

  8. 139.00.007 Git学习-Cheat Sheet

    @(139 - Environment Settings | 环境配置) Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了. 友情附赠国外网 ...

  9. 关于cn.jedisoft.framework.annotations 的增删改查

    今天在做一个crud的功能的时候,调用api老是调用不同.奇怪的是 在add的时候能添加进去,而删除和修改的时候不能成功. 最后反应过来,我在修改和删除的时候用的主键id是int类型的,接口类型是不能 ...

  10. 线程间协作:wait、notify、notifyAll

    线程间协作:wait.notify.notifyAll 在 Java 中,可以通过配合调用 Object 对象的 wait() 方法和 notify()方法或 notifyAll() 方法来实现线程间 ...