您的位置:首页 > 其它

【jzoj5346】【NOIP2017提高A组模拟9.5】【NYG的背包】【贪心】

2017-09-06 22:15 621 查看

description



solution

考虑贡献为正的,显然花费a最少先做,考虑贡献为负的,可以将ab调转过来,那显然花费最少的先做,也就是b最小的先做。

code

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LF double
#define LL long long
#define ULL unsigned int
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define fr(i,j) for(int i=begin[j];i;i=next[i])
using namespace std;
int const mn=1e5+2;
int t,n;
LL v;
struct rec{
int p,w;
};
rec a[mn];
bool cmp(rec x,rec y){
return ((x.w-x.p>=0)&&(y.w-y.p>=0)&&(x.p<y.p))
||((x.w-x.p>=0)&&(y.w-y.p<0))
||((x.w-x.p<0)&&(y.w-y.p<0)&&(x.w>y.w));
}
int main(){
freopen("backpack.in","r",stdin);
freopen("backpack.out","w",stdout);
scanf("%d",&t);
fo(cas,1,t){
scanf("%d%lld",&n,&v);
fo(i,1,n)scanf("%d%d",&a[i].p,&a[i].w);
sort(a+1,a+n+1,cmp);
fo(i,1,n)if(a[i].p<=v)v+=a[i].w-a[i].p;
else{v=-1;break;}
if(v!=-1)printf("Yes\n");
else printf("No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: