【POJ】1456 supermarket

【POJ】1456 supermarket 给定 n 件物品,第 i件物品有如下信息:
卖出去可以得到pi的收益。
过期时间为di ,过了过期时间就不能再卖出去。
卖掉一件物品要用 1 的时间,求最大收益。
多组数据,每组数据一行,首先一个整数 n然后 n对数pi ,di ,以文件终止符结束。
0≤n≤10000
1≤pi,di ≤10000 。
思路 【【POJ】1456 supermarket】先按收益排序。
用剩余过期时间做并查集。
若没有过时。
加收益,剩余过期时间-1;
代码

#include #include #include #include using namespace std; struct jgt { int d,p; }a[10010]; int n,f[10010]; int find(int x)//找代表值 { if(x==f[x]) return x; return f[x]=find(f[x]); } bool cmp(jgt t1,jgt t2) { return t1.p>t2.p; } int main() { int mx,ans,i,t; while(cin>>n) {for(mx=0,i=0; i0) {ans+=a[i].p; //加收益 f[t]=t-1; //剩余过期时间-1 } } printf("%d\n",ans); } return 0; }

    推荐阅读