POJ - 1456 Supermarket (贪心)
2017-12-10 21:30
309 查看
题意:
商店卖N件东西,每件东西都有个截止时间,在截止时间之前买都可以,商店每天只能卖一件商品。问最大获利。
题解:
用贪心去做,我的做法是先排序找到最大价值的商品,然后放到vis[j]中,表示在第j天中销售这件商品,然后遍历每件商品,
如果发现有一件商品比在j天销售的商品的价值还要高的话就把价值低的移动到前一天,如果前一天比这件价值低的商品的价值高的话就继续往前面放置比较,如此反复即可。
10000*10000,最多1秒多点的时间复杂度, 所以不会TL。
商店卖N件东西,每件东西都有个截止时间,在截止时间之前买都可以,商店每天只能卖一件商品。问最大获利。
题解:
用贪心去做,我的做法是先排序找到最大价值的商品,然后放到vis[j]中,表示在第j天中销售这件商品,然后遍历每件商品,
如果发现有一件商品比在j天销售的商品的价值还要高的话就把价值低的移动到前一天,如果前一天比这件价值低的商品的价值高的话就继续往前面放置比较,如此反复即可。
10000*10000,最多1秒多点的时间复杂度, 所以不会TL。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int MAXN=1e4+7; struct node { int p,d; }a[MAXN]; int vis[MAXN]; bool cmp(node b,node c) { return b.p>c.p; } int main() { int n; while(~scanf("%d",&n)) { memset(vis,0,sizeof(vis)); int MAX=0; for(int i=0;i<n;i++){ scanf("%d%d",&a[i].p,&a[i].d); if(a[i].d>MAX) MAX=a[i].d; } sort(a,a+n,cmp); for(int i=0;i<n;i++) { int x=a[i].p; for(int j=a[i].d;j>=1;j--) { if(x>vis[j]) { int t=vis[j]; vis[j]=x; x=t; } } } int sum=0; for(int i=1;i<=MAX;i++) sum+=vis[i]; printf("%d\n",sum); } } /* 我的做法是先排序找到最大价值的商品,然后放到vis[j]中,表示在第j天中销售这件商品,然后遍历每件商品, 如果发现有一件商品比在j天销售的商品的价值还要高的话就把价值低的移动到前一天,如果前一天比这件价值低的商品的价值高的话就继续往前面放置比较,如此反复即可。 10000*10000,最多1秒多点的时间复杂度, 所以不会TL。 */
相关文章推荐
- POJ-1456 Supermarket 贪心问题 有时间限制的最小化惩罚问题
- POJ-1456 Supermarket (贪心)
- poj 1456 Supermarket 贪心 并查集优化
- Supermarket poj 1456 (贪心,并查集)
- poj 1456 Supermarket 贪心,我已开始用dp,没做出来,惭愧!!
- POJ1456 Supermarket 贪心 DP
- POJ1456Supermarket(贪心+优先队列)
- POJ 1456 Supermarket(贪心)
- poj 1456 Supermarket (贪心, 并查集)
- POJ-1456---Supermarket (贪心)
- POJ 1456 Supermarket(贪心)
- POJ-1456 Supermarket(贪心,并查集优化)
- Supermarket poj 1456 贪心+并查集优化
- poj1456 Supermarket(贪心)
- Supermarket POJ - 1456------贪心加并查集
- POJ-1456 Supermarket(贪心,并查集优化)
- POJ---1456(Supermarket ,贪心,并查集优化,处理冲突)
- poj 1456 - Supermarket(贪心+并查集)
- POJ 1456——Supermarket——————【贪心+并查集优化】
- [POJ 1456]Supermarket[贪心][优先队列or并查集优化]