supermarket
2024-08-28 03:00:44
题意:给你n个商品,商品的利润和商品的过期时间,商品必须在过期时间内卖才能算利润,每天只能卖一件商品,问利润最大值。
思路:用并查集+贪心的思路,先给商品从大到小排序,然后选择过期时间的根节点,再将根节点和根节点-1的时间merge,当根节点不为0,累计加上利润
最后求得最大值。因为过期时间具有传递性,你在第n天卖等价于第n-1天卖,很容易证得思路的正确性。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cmath>
#define ll long long
using namespace std;
struct point
{
int x;
int y;
}a[];
int fa[];
bool cmp(point a,point b)
{
return a.x>b.x;
}
int get(int k)
{
return fa[k]==k?k:fa[k]=get(fa[k]);
}
void merge(int x,int y)
{
fa[get(x)]=get(y);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=;i<n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
for(int i=;i<=;i++)
{
fa[i]=i;
}
sort(a,a+n,cmp);
/* for(int i=0;i<n;i++)
{
printf("x:%d y:%d\n",a[i].x,a[i].y);
}*/
int sum=;
for(int i=;i<n;i++)
{
int r=get(a[i].y);
// printf("r:%d\n",r);
if(r!=)
{
sum+=a[i].x;
merge(r,r-);
}
}
printf("%d\n",sum);
}
}
最新文章
- exiv2 如何改变时间戳
- jQuery 正则选择器
- 一个App完成入门篇(三)-完善主框架
- SharePoint Online 创建门户网站系列之图片滚动
- 【leetcode】Single Number II (medium) ★ 自己没做出来....
- HTML5播放器
- javascript 快速排序
- XSS【跨站脚本攻击】
- java 强弱引用
- ecshop中ajax的调用原理 1
- 【翻译】Ext JS最新技巧——2014-9-10
- MySQL学习基础知识1
- [ExecuteInEditMode]
- js 1+&#39;2&#39; == &#39;1&#39;+&#39;2&#39;
- HTTP请求头及其作用 转
- git常用命令和场景
- myeclipse删除项目后重新导入
- js 的各种排序算法 -- 待续
- 一个事件激活多个JavaScript函数
- assert 函数
热门文章
- linux常用符号命令
- Java的常用类 String
- C++ 编写的DLL导出的函数名乱码含义解析
- 本站页脚HTML回顶部代码
- Nginx 配置 location 以及 return、rewrite 和 try_files 指令
- Maven安装、配置环境变量
- #python# 使用代理和不使用代理对比
- CodeChef Gcd Queries
- 【学习总结】java数据结构和算法-第二章-数据结构和算法概述
- 解决java compiler level does not match the version of the installed java project facet问题