poj1456(两种做法)
来源:互联网 发布:java跳出foreach循环 编辑:程序博客网 时间:2024/05/05 06:07
带时限的作业排序~~
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring> using namespace std; struct node { int p; int t; }; node a[10005]; int visit[10005];int cmp(node c,node d)//按照收益从大到小,相同收益则时间后的在前{ if (c.p==d.p) return c.t>d.t; else return c.p>d.p;} int main() { int i,j,n,end,max,sum; while(scanf("%d",&n)==1) { sum=0; memset(a,0,sizeof(a)); memset(visit,0,sizeof(visit)); for (i=0;i<n;i++) scanf("%d%d",&a[i].p,&a[i].t); sort(a,a+n,cmp); for (i=0;i<n;i++) { if (!visit[a[i].t]) { sum=sum+a[i].p; visit[a[i].t]=1; } else { for (j=a[i].t-1;j>=1;j--)//因为这边是截止时间,所以注意是1 { if (!visit[j]) { visit[j]=1; sum=sum+a[i].p; break; } } } } printf("%d\n",sum); } return 0; }
并查集做法
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio> using namespace std; struct node { int p; int t; }; int cmp(node c,node d) { if (c.p==d.p) return c.t>d.t; else return c.p>d.p; } int pre[10005]; node a[10005]; int find(int i) { int j=i,temp; while(pre[i]!=i) i=pre[i]; while(j!=i) { temp=pre[j]; pre[j]=i; j=temp; } return i;}int main() { int i,j,n,sum,q; while(scanf("%d",&n)==1) { sum=0; memset(pre,0,sizeof(pre)); for (i=0;i<n;i++) scanf("%d%d",&a[i].p,&a[i].t); sort(a,a+n,cmp); for (i=1;i<=10005;i++) pre[i]=i; for (i=0;i<n;i++) { q=find(a[i].t); if (q>0) { pre[q]=q-1; sum=sum+a[i].p; } } printf("%d\n",sum); } return 0; }
0 0
- poj1456(两种做法)
- HDU4690_EBCDIC 两种做法
- poj1456
- POJ1456
- poj1456
- poj1456
- 网线的两种做法
- 两种香肠的做法
- 表格尾部两种做法
- POJ 3275 两种做法
- poj 1006 Biorhythms(两种做法)
- 减小编译时间的两种做法
- EasyUI Pagination 分页的两种做法
- EasyUI Pagination 分页的两种做法
- EasyUI Pagination 分页的两种做法
- EasyUI Pagination 分页的两种做法
- 【LeetCode】Majority Element两种做法对比
- N 皇后的两种做法
- sublime使用技巧
- PCI总线学习(一)---> PCI概述
- Session和cookie
- 1029. 旧键盘
- 结构型模式总结
- poj1456(两种做法)
- 解释器模式
- [Python]回顾Python中的内省机制
- usaco 4.3 Letter Game 2010.8.8
- PCI总线学习(二)---> PCI总线仲裁
- 字符串_笔记
- ubuntu14.04 PCL1.8 OPENNI2.0 OPENCV3.0安装小结
- usaco ariprog
- 杭电3785寻找大富翁