程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ - 1456 Supermarket

POJ - 1456 Supermarket

編輯:C++入門知識

題意:買賣N件東西,每件東西都有個截止時間,在截止時間之前買都可以,而每個單位時間只能買一件。問最大獲利。

思路:顯然貪心是這道題的方法,如果在商品的最後的日期能買的話,就買,否則看看它之前一天的時間能不能買,依次類推,怎麼標記我們能買的日子呢,並查集解決,初始化都是-1,如果被占用了,那麼就找前一個節點也就是昨天,直到找到沒被占用的日子

#include 
#include 
#include 
#include 
using namespace std;
const int MAXN = 10010;

struct node{
    int p,d;
}arr[MAXN];
int f[MAXN],n;

bool cmp(node a,node b){
    return a.p > b.p;
}

int find(int x){
    if (f[x] == -1)
        return x;
    return f[x] = find(f[x]);
}


int main(){
    while (scanf("%d",&n) != EOF){
        memset(f,-1,sizeof(f));
        for (int i = 0; i < n; i++)
            scanf("%d%d",&arr[i].p,&arr[i].d);
        sort(arr,arr+n,cmp);
        int ans = 0;
        for (int i = 0; i < n; i++){
            int t = find(arr[i].d);
            if (t > 0){
                ans += arr[i].p;
                f[t] = t-1;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved