题目链接:http://codevs.cn/problem/1135/

题目大意:中文题。。。就不解释了

题目思路:看了其他巨巨的blog写的,dp思路

#include <iostream>                          ///时间复杂度O(n) 空间复杂度O(5n)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
using namespace std;
#define gamma 0.5772156649015328606065120 //欧拉常数
#define MOD 100000007
#define inf 0x3f3f3f3f
#define N 200010
#define maxn 10001000
typedef long long LL;
typedef pair<int,int> PII; int f[N]; ///保存第从1~i-1个客栈消费小于p的最大的客栈编号
int color[N]; ///保存1~i-1个客栈和i个客栈颜色相同的客栈个数
int c2[N]; ///c2[i]=1~i-1号客栈中与第i号客栈色调相同,且到第i号旅馆路上存在最低消费不大于p的客栈的客栈数目
int r[N]; ///第1~i-1的客栈中色调与i客栈相同的最大的编号
int _max[N]; ///maxc[i]=之前所有客栈中,色调为i的最大编号 int main()
{
int a,i,n,m,p,b;
scanf("%d%d%d",&n,&m,&p);
for(i=; i<=n; ++i)
{
scanf("%d%d",&a,&b);
r[i]=_max[a];
if(b<=p) f[i]=i;
else f[i]=f[i-];
if(f[i]<r[i])c2[i]=c2[r[i]];
else c2[i]=color[a];
_max[a]=i;
++color[a];
}
int ans=;
for(i=; i<=n; ++i) ans+=c2[i];
cout<<ans<<endl;
return ;
}

原文地址:传送门

今天又重做了一遍,有了自己的思路,而且感觉比较清晰

#include <iostream>                               ///时间复杂度O(kn) 空间复杂度O(2n+2k)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define Min(x,y) (x<y?x:y)
#define Max(x,y) (x>y?x:y)
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 100000007
#define inf 0x3f3f3f3f
#define N 200005
#define maxn 10001000
typedef long long LL;
typedef pair<int,int> PII; int a[N],b[N];
int color[]; ///当遍历到当前第i个客栈时,保留离当前客栈最近的(不包括当前客栈)
///价格低于p的客栈前面的不同色调客栈的分别的和
int hotel[]; ///当遍历到第i个客栈时保留的是前面不同色调客栈的分别的和
int ans; int main()
{
int i,j,n,c,p,tc,tp;
scanf("%d%d%d",&n,&c,&p);
for(i=; i<=n; ++i) scanf("%d%d",&a[i],&b[i]);
for(i=; i<=n; ++i){
tc=a[i]; tp=b[i];
if(tp<=p){
for(j=; j<=c; ++j)
color[j]=hotel[j];
}
ans+=color[tc];
if(tp<=p)
++color[tc];
++hotel[tc];
}
printf("%d\n",ans);
return ;
}

第三次解题,这次有较大优化且更易理解

#include <iostream>                            ///时间复杂度O(n) 空间复杂度O(3k)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define Min(x,y) (x<y?x:y)
#define Max(x,y) (x>y?x:y)
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 100000007
#define inf 0x3f3f3f3f
#define N 200005
#define maxn 10001000
typedef long long LL;
typedef pair<int,int> PII; int f[51];                    ///保留1~i-1色调与i相同且到i途中有合适咖啡馆的旅店总数
int hotel[51];                ///保留1~i-1色调与i相同的旅店总数
int last[51];                 ///保留1~i-1色调与i相同的旅店最后出现的位置
int temp;                    ///temp是整个算法的精髓,temp保留的是符合条件的咖啡馆最后出现的位置 int main()
{
    int i,j,n,c,p,x,y,ans=0;
    scanf("%d%d%d",&n,&c,&p);
    for(i=1; i<=n; ++i){
        scanf("%d%d",&x,&y);
        if(y<=p) temp=i;
        if(temp>=last[x]) f[x]=hotel[x];
        ans+=f[x];
        ++hotel[x];
        last[x]=i;
    }
    printf("%d\n",ans);
    return 0;
}

NOIP2011提高组(选择客栈)的更多相关文章

  1. Noip2011 提高组 选择客栈

    P1311 选择客栈 直通 思路: ①看题,我们可以发现一个显然的性质,即当最左边的客栈向右移动时,最右边的客栈时单调向右的,并且右端点往右的客栈也符合要求.(因为只要左侧有一个满足的,右边的自然可以 ...

  2. NOIP2011提高组 选择客栈

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

  3. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  4. [NOIP2011] 提高组 洛谷P1312 Mayan游戏

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  5. [NOIP2011] 提高组 洛谷P1315 观光公交

    题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...

  6. [NOIP2011] 提高组 洛谷P1003 铺地毯

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  7. NOIP2011(提高组)DAY2---观光公交(vijosP1741)

    描述 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0分钟出现在1号景点,随后依次前往2.3.4……n号景 ...

  8. 洛谷-铺地毯-NOIP2011提高组复赛

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  9. 刷题总结——mayan游戏(NOIP2011提高组day2T3)

    题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  10. 洛谷P1003 铺地毯 noip2011提高组day1T1

    洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...

随机推荐

  1. 使用Python实现生产者消费者问题

    之前用C++写过一篇生产者消费者的实现. 生产者和消费者主要是处理互斥和同步的问题: 队列作为缓冲区,需要互斥操作 队列中没有产品,消费者需要等待,直到生产者放入产品并通知它.队列慢的情况类似. 这里 ...

  2. jQuery 创建html

    jQuery 创建html

  3. 自定义radio/checkbox样式

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. CASE WHEN 的用法

    Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END   ...

  5. iOS 转盘动画效果实现

    代码地址如下:http://www.demodashi.com/demo/11598.html 近期公司项目告一段落,闲来无事,看到山东中国移动客户端有个转盘动画挺酷的.于是试着实现一下,看似简单,可 ...

  6. 严重: Exception sending context initialized event to listener instance of class org.springframework.we

    2014-6-1 0:47:25 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache Tomcat ...

  7. spring学习笔记(六)

    1.配置环绕通知 需要实现的接口为  MethodInterceptor   代码举例 package com.huawei.aop; import org.aopalliance.intercept ...

  8. H5网站模板——前台和后台

    以下是比较典型的前台或者后台的H5模板: html5优分期大学生分期购物商城模板链接:http://pan.baidu.com/s/1dEUAzBz 密码:j150 红色的五金电气商城网站模板链接:h ...

  9. tony_CENTOS启动方式设置

    方法: 在etc文件夹下面有个初始加载文件是用来启动系统的,系统在启动的时候先去env中找到shell的必要配置,然后把shell启动起来,那么再然后就要启动整个系统了,到底是启动图形界面呢,还是字符 ...

  10. Atitit.android  jsbridge v1新特性

    Atitit.android  jsbridge v1新特性 1. Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的.只是参数url的写法不一样而已1 2. 三.JAVA ...