POJ
来源:互联网 发布:sql server2005企业版 编辑:程序博客网 时间:2024/05/29 15:36
题意:
商店卖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。 */
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- rxjs基础知识
- eclipse maven项目用tomcat启动报错 java.lang.ClassNotFoundException
- getGreatestCommonDivisor
- C++中的constexpr关键字
- django 快速入门
- POJ
- CookiePATH的设置
- 【CSS】关于CSS盒子模型中的溢出处理方式overflow属性
- 静态对象的实现
- FLASH位宽为8、16、32时,CPU与外设之间地址线的连接方法
- 爬取1024网站的图片
- Java开发微信公众号(二)——开发请求校验程序
- python爬虫学习 之 定向爬取 中国大学排名
- python爬取链家网数据