zoukankan      html  css  js  c++  java
  • [dp][noip2011]选择客栈

    题目描述 Description

    丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从1 到n 编号。每家客栈都按照某一种色调进行装饰(总共k 种,用整数0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。
    两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过p。
    他们想知道总共有多少种选择住宿的方案,保证晚上可以找到一家最低消费不超过p元的咖啡店小聚。

    输入描述 Input Description

    共n+1 行。
    第一行三个整数 n,k,p,每两个整数之间用一个空格隔开,分别表示客栈的个数,色调的数目和能接受的最低消费的最高值;
    接下来的 n 行,第i+1 行两个整数,之间用一个空格隔开,分别表示i 号客栈的装饰色调和i 号客栈的咖啡店的最低消费。

    输出描述 Output Description

    输出只有一行,一个整数,表示可选的住宿方案的总数。

    样例输入 Sample Input

    5 2 3
    0 5
    1 3
    0 2
    1 4
    1 5

    样例输出 Sample Output

    3

    数据范围及提示 Data Size & Hint

    【输入输出样例说明】

    客栈编号
    色调 
    最低消费  5

    2 人要住同样色调的客栈,所有可选的住宿方案包括:住客栈①③,②④,②⑤,④⑤,
    但是若选择住 4、5 号客栈的话,4、5 号客栈之间的咖啡店的最低消费是 4,而两人能承受
    的最低消费是 3 元,所以不满足要求。因此只有前 3 种方案可选。

     

    【数据范围】
    对于 30%的数据,有n≤100;
    对于 50%的数据,有n≤1,000;
    对于 100%的数据,有2≤n≤200,000,0<k≤50,0≤p≤100, 0≤最低消费≤100。

     

    代码

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define MAXN 200010
     4 #define MAXK 53
     5 int n, k, p;
     6 int color[ MAXN ], cost[ MAXN ];
     7 int g[ MAXN ][ MAXK ];
     8 int lc[ MAXN ];
     9 long long ans = 0;
    10 
    11 int main(){
    12 
    13     scanf("%d%d%d", &n, &k, &p);
    14 
    15     int i, j;
    16 
    17     for( i = 1; i <= n; i++ ){
    18         scanf("%d%d", &color[ i ], &cost[ i ]);
    19     }
    20     
    21     for( i = 1; i <= n; i++ ){
    22         for( j = 0; j < k; j++ ){
    23             g[ i ][ j ] = g[ i - 1 ][ j ];
    24         }
    25         g[ i ][ color[ i ] ]++;
    26     }
    27     
    28     for( i = 1; i <= n; i++ ){
    29         if( cost[ i ] <= p ) lc[ i ] = i;
    30         else lc[ i ] = lc[ i - 1 ];
    31     }
    32     
    33     for( i = 2; i <= n; i++ ){
    34         ans += g[ lc[ i ] ][ color[ i ] ];
    35         if( lc[ i ] == i ) ans--;
    36     }
    37     
    38     printf("%lld", ans);
    39 
    40     return 0;
    41 }
  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/FrozenApple/p/4924143.html
Copyright © 2011-2022 走看看