您的位置:首页 > 其它

pku 1456 Supermarket

2010-05-20 18:55 225 查看
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 10005
struct Product
{
int profit;
int deadline;
bool operator < (const Product& rhs) const
{
return deadline < rhs.deadline;
}
};
int profit
;
Product product
;
int main()
{
int n;
int i, j;
while(scanf("%d", &n) != EOF)
{
int maxDeadline = -1;
memset(profit, 0, sizeof(profit));
for(i = 0; i < n; ++i)
{
scanf("%d%d", &product[i].profit, &product[i].deadline);
if(product[i].deadline > maxDeadline)
maxDeadline = product[i].deadline;
}
sort(product, product+n);
for (i = 0; i < n; ++i)
{
if(profit[product[i].deadline] == 0)
profit[product[i].deadline] = product[i].profit;
else
{
int value = product[i].profit;
int minValue = INT_MAX;
int minIndex = -1;
for(j = 1; j <= product[i].deadline; ++j)
{
if(profit[j] == 0)
{
profit[j] = value;
break;
}
if(profit[j] < minValue)
{
minValue = profit[j];
minIndex = j;
}
}
if(j > product[i].deadline && value > profit[minIndex])
profit[minIndex] = value;
}
}

int sum = 0;
for(i = 1; i <= maxDeadline; ++i)
sum += profit[i];
printf("%d/n", sum);
}
return 0;
}


本题还可以用小顶堆优化, 将时间复杂度降到O(N*logN).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: