Supermarket 并查集或贪心
来源:互联网 发布:人性的枷锁 知乎 编辑:程序博客网 时间:2024/05/01 08:27
题目链接:http://poj.org/problem?id=1456
题目大意:给你n个物品,每种物品都有一个价值v和最晚出售时间t,问你怎样的顺序出售可获得最大利润?
首先说贪心法:把物品按价值降序排序,然后从开始遍历物品,如果这个物品在最晚期限那天可以出售,就在那天出售,并标记这天有物品出售,如果那天已经有物品出售,就向前找能出售的第一个时间,标记,当找不到能出售的时间,则这个物品不能出售(因为这个物品能出售的时间肯定被比他价值大的物品占用了),当然这种决策也保证了可以出售总价值最大的物品,代码如下:
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;#define N 10005bool hash[N];struct node{int v;int t;}s[N];bool cmp(node x,node y){ return x.v>y.v;//降序排列}int main(){ int n; while(~scanf("%d",&n)) { memset(hash,true,sizeof(hash)); for(int i=0;i<n;i++) scanf("%d%d",&s[i].v,&s[i].t); stable_sort(s,s+n,cmp); int sum=0; for(int i=0;i<n;i++) { //当前时间可出售 if(hash[s[i].t]) {hash[s[i].t]=false;sum+=s[i].v;} else { //向前找可出售的时间 for(int j=s[i].t-1;j>0;j--) if(hash[j]) {hash[j]=false;sum+=s[i].v;break;} } } printf("%d\n",sum); }}
当然,你们会发现上面的代码查找 可以出售的时间 花了很多时间,这个题也可以用并查集,查找速度当然比这个查找要快,解释在代码里,代码如下:
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;#define N 10005struct node{int v;int t;}s[N];int fa[N];bool cmp(node x,node y){ return x.v>y.v;}int find(int x){ if(x==fa[x]) return x; return fa[x]=find(fa[x]);//此处边查找边更新;}int main(){ int n; while(~scanf("%d",&n)) { for(int i=1;i<N;i++) fa[i]=i;//初始化父节点为自己 for(int i=0;i<n;i++) scanf("%d%d",&s[i].v,&s[i].t); sort(s,s+n,cmp); int sum=0; for(int i=0;i<n;i++) { int fx=find(s[i].t); if(fx>0)//如果当前天数前有可用天数 { sum+=s[i].v; fa[fx]=fx-1;//把当前 可用天数-1赋给其父节点 } } printf("%d\n",sum); }}
0 0
- Supermarket 并查集或贪心
- Supermarket -- 贪心 + 并查集
- poj 1456 Supermarket (贪心, 并查集)
- POJ 1456 Supermarket【贪心 + 并查集】
- poj 1456 - Supermarket(贪心+并查集)
- poj 1456 Supermarket (贪心+并查集)
- POJ 1456 Supermarket【贪心+并查集】
- POJ 1456 Supermarket [贪心+并查集]
- Supermarket poj 1456 (贪心,并查集)
- POJ-1456 Supermarket【贪心+并查集】
- 【经典贪心】poj 1456 Supermarket (贪心, 并查集)
- Supermarket 并查集
- POJ 1456 Supermarket(贪心算法,可用并查集优化)
- Supermarket poj 1456 贪心+并查集优化
- POJ 1456 Supermarket(贪心 + 并查集 )
- POJ-1456 Supermarket(贪心,并查集优化)
- NYOJ 208 Supermarket (贪心 && 并查集)
- poj 1456 Supermarket 贪心 并查集优化
- Phoenix实战(hadoop2、hbase0.96)
- 测试环境redis数据库的使用
- CPU使用率统计
- 剑指offer (30)选择问题-----1.有一组N个数,确定其中第K个最大者;2.求最小的k个数
- ipv4网络中特殊地址
- Supermarket 并查集或贪心
- oracle 数据库无法自动创建snapshot
- 如何找回U盘清理了的文件
- 共享内存源码
- 放假咯,才2天啊
- Android 解读Volley
- sftp opensuse配置
- git / ssh 不用每次都输入密码的方法
- TortoiseGit的远程拉取