zoukankan      html  css  js  c++  java
  • POJ 1456 Supermarket

    题意:商场卖东西,每种商品有两个属性,一种是价格pi,另一种是保质期di,每种商品只能在天数<=di的时候卖出。每天只能卖一种商品,问最多能卖出价格之和为多少的商品。(n <= 10^4,di <= 10^4,pi <= 10^4)

    解法:贪心。首先对所有商品排个序,然后从价格高到价格低,考虑每一件物品能否被卖出去,若能则卖,不能则考虑下一件,直到遍历完所有商品。

       考虑某件商品x的时候,判断di天是否要卖商品,如果那天不卖则di天卖,否则考虑di - 1天卖,再否则考虑di - 2天卖。。。如果直到第1天都不能卖出该件商品,则认为该商品不能卖出。

       这个方法如果用hash来记录,就会是O(n^2)的复杂度,不能接受。但是可以考虑用并查集优化。对某个节点x,其父亲节点f[x]表示小于等于x的天数中,最大的可以卖出商品的日子。比如,第2,3,5,7天要卖出商品,则f[1] = 1,f[2] = 1,f[3] = 1,f[4] = 4,f[5] = 4,f[6] = 6,f[7] = 6,f[8] = 8。

    tag:greedy, 并查集, good

     1 /*
     2  * Author:  Plumrain
     3  * Created Time:  2013-11-26 11:33
     4  * File Name: G-POJ-1456.cpp
     5  */
     6 #include <iostream>
     7 #include <cstdio>
     8 #include <algorithm>
     9 #include <utility>
    10 
    11 using namespace std;
    12 
    13 typedef pair<int, int> pii;
    14 
    15 int n, f[10005];
    16 pii a[10005];
    17 
    18 bool cmp(pii a, pii b)
    19 {
    20     return a.first > b.first;
    21 }
    22 
    23 int find(int x)
    24 {
    25     if (x != f[x]) f[x] = find(f[x]);
    26     return f[x]; 
    27 }
    28 
    29 int gao()
    30 {
    31     int sum = 0;
    32     for (int i = 0; i < n; ++ i){
    33         int t1 = a[i].first, t2 = a[i].second;
    34         int x = find(t2);
    35         if (x > 0){
    36             sum += t1;
    37             f[x] = x - 1;
    38         }
    39     }
    40     return sum;
    41 }
    42 
    43 int main()
    44 {
    45     while (scanf ("%d", &n) != EOF){
    46         int maxd = 0;
    47         for (int i = 0; i < n; ++ i){
    48             scanf ("%d%d", &a[i].first, &a[i].second);
    49             maxd = max(maxd, a[i].second);
    50         }
    51         sort(a, a+n, cmp);
    52 
    53         for (int i = 0; i <= maxd; ++ i)
    54             f[i] = i;
    55 
    56         printf ("%d
    ", gao());
    57     }
    58     return 0;
    59 }
    View Code
    ------------------------------------------------------------------
    现在的你,在干什么呢?
    你是不是还记得,你说你想成为岩哥那样的人。
  • 相关阅读:
    strace排除Linux服务器故障
    详解如何在linuxmint上用源码包安装nodejs
    linux 安装nodejs
    使用Vue实现购物车功能
    Vue项目中使用better-scroll
    vue项目中使用axios发送ajax
    在VUE的项目中使用字体图标以及Stylus
    Vue在使用组件中的一些需要记住的点
    Vue简易动画实现和使用animate.css库
    使用Vue.js进行数据绑定以及父子组件传值
  • 原文地址:https://www.cnblogs.com/plumrain/p/POJ_1456.html
Copyright © 2011-2022 走看看