【题目】
【题意】
给出一组物品和背包容量,物品有体积和喜爱程度即装进背包背包能扩大的容量,如果能全部装下输出yes,否则输出no。
【思路】
喜爱程度大于体积的物品按体积升序排序优先放入,然后再放其他的。排个序判断是否符合即可。
【代码】
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#define go(i,a,b) for(int i=a;i<=b;i++)
#define og(i,a,b) for(int i=a;i>=b;i--)
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
const int maxn=10000;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef unsigned long long ull;
int pre[1005];
int find(int x){return x==pre[x]?x:pre[x]=find(pre[x]);}
int gcd(int a, int b){return b==0?a:gcd(b,a%b);}
struct p{
int a,b,c;
}f[100005];
bool cmp(p x,p y)
{
if(x.c>0&&y.c>0) return x.a<y.a;
else if(x.c>0) return true;
else return false;
}
main()
{
int t,n,v;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&v);
go(i,0,n-1) scanf("%d%d",&f[i].a,&f[i].b),f[i].c=f[i].b-f[i].a;
sort(f,f+n,cmp);
int s=1;
go(i,0,n-1)
{
if(v>=f[i].a) v+=f[i].c;
else s=0;
}
if(s) printf("yes\n");
else printf("no\n");
}
}