POJ - 1456 Supermarket
2014-01-05 21:34
253 查看
题意:买卖N件东西,每件东西都有个截止时间,在截止时间之前买都可以,而每个单位时间只能买一件。问最大获利。
思路:显然贪心是这道题的方法,如果在商品的最后的日期能买的话,就买,否则看看它之前一天的时间能不能买,依次类推,怎么标记我们能买的日子呢,并查集解决,初始化都是-1,如果被占用了,那么就找前一个节点也就是昨天,直到找到没被占用的日子
思路:显然贪心是这道题的方法,如果在商品的最后的日期能买的话,就买,否则看看它之前一天的时间能不能买,依次类推,怎么标记我们能买的日子呢,并查集解决,初始化都是-1,如果被占用了,那么就找前一个节点也就是昨天,直到找到没被占用的日子
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> 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; }
相关文章推荐
- poj 1456 Supermarket (最短路程)
- POJ 1456 Supermarket(贪心)
- POJ 1456 Supermarket【贪心 + 并查集】
- Poj 1456 Supermarket
- Supermarket poj 1456 贪心+并查集优化
- POJ 1456 Supermarket
- 【POJ 1456】Supermarket
- 【经典贪心】poj 1456 Supermarket (贪心, 并查集)
- Poj 1456 Supermarket(2)
- poj 1456 Supermarket
- poj1456 Supermarket
- poj 1456 supermarket
- POJ 1456 Supermarket
- POJ 1456 (贪心+并查集) Supermarket
- POJ-1456 Supermarket【贪心】
- [POJ 1456]Supermarket[贪心][优先队列or并查集优化]
- Supermarket POJ - 1456
- Supermarket poj 1456
- POJ-1456 Supermarket 贪心问题 有时间限制的最小化惩罚问题
- POJ 1456 Supermarket 【贪心】