poj1456Supermarket 贪心解法

传送门

题意:

给出n个产品的利润和贩卖截止时间,单位时间只能贩卖一个产品.求最终获得的最大利润.

分析:

要获得最大利润,在同一时间肯定优先考虑利润较大的产品;

所以可以根据利润进行排序,优先处理利润大的产品,最终获得的肯定是最大利润.

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#define INF 0x3f3f3f3f
#define MAX 100
typedef long long ll;
struct node{
	int p,d;
	bool operator < (const node&a)const{
		return p < a.p;
	}
}v[10005];
int n;
int place[10005];
int use[10005];

int main(int argc, char const* argv[])
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
	while (scanf("%d",&n)!=EOF){
		ll ans = 0;
		for (int i = 0; i < n; i += 1) {
			scanf("%d%d",&v[i].p,&v[i].d);
		}
		sort(v,v+n);
		memset(place,0,sizeof(place));
		memset(use,0,sizeof(use));
		for (int i = n-1; i >= 0; i -= 1){
			int t = v[i].d;
			while (use[t]&&t>0){
				t = t-1;
			}
			if (t>0){
				ans += v[i].p;
				use[t] = 1;
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
}
可以对上述代码进行优化,每次处理产品后记录相同截止时间的下个可用时间点.这样后面截止时间相同的就不用从后往前查找了.

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#define INF 0x3f3f3f3f
#define MAX 100
typedef long long ll;
struct node{
	int p,d;
	bool operator < (const node&a)const{
		return p < a.p;
	}
}v[10005];
int n;
int nex[10005];
int use[10005];

int main(int argc, char const* argv[])
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
	while (scanf("%d",&n)!=EOF){
		ll ans = 0;
		memset(nex,0,sizeof(nex));
		memset(use,0,sizeof(use));
		for (int i = 0; i < n; i += 1) {
			scanf("%d%d",&v[i].p,&v[i].d);
			nex[v[i].d] = v[i].d;
		}
		sort(v,v+n);
		for (int i = n-1; i >= 0; i -= 1){
			int t = nex[v[i].d];
			while (use[t]&&t>0) t = t-1;//找到可用时间点
			if (t>0){
				ans += v[i].p;
				use[t] = 1;
				nex[v[i].d] = t-1;
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
}



你可能感兴趣的:(贪心)