如果两件物品 i,j,i物品的重量小于等于j物品的重量且i物品的价值大于等于j物品的价值,那么j物品就没有存在的价值了,直接去掉
怎么快速的做到这点?
暂时只想到这样
#include<stdio.h> #include<algorithm> using namespace std; struct node { int w,d; }st[100],sd[100]; int cmp(node x,node y) { if(x.w!=y.w)return x.w<y.w; if(x.d!=y.d)return x.d>y.d; } int main() { int n; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) scanf("%d%d",&st[i].d,&st[i].w); sort(st,st+n,cmp); int ans=-9999,k=0; for(int i=0;i<n;i++) { if(st[i].d>ans) { sd[k].d=st[i].d; sd[k++].w=st[i].w; ans=st[i].d; } } puts("剩下的物品:"); for(int i=0;i<k;i++) printf("%d %d ",sd[i].d,sd[i].w); } return 0; }