33,007
社区成员
发帖
与我相关
我的任务
分享
typedef struct SRes
{
int owned;
int need;
SRes(int a, int b)
{
owned = a;
need = b;
}
bool operator < (SRes*& other)
{
return this->need < other->need;
}
}* PRES;
struct Less_PRES{
bool operator()(PRES p1, PRES p2)
{
return p1->need < p2->need;
}
};
bool res_alloc(int n ,int s,multiset<PRES,Less_PRES>& setRes)
{
typedef multiset<PRES,Less_PRES>::iterator IT;
SRes tmp(0,s);
while(setRes.size())
{
IT itr = setRes.insert(&tmp);
if(itr == setRes.begin())
{
return false;
}
else
{
itr ++;
if(itr == setRes.end())
{
return true;
}
for(IT it = setRes.begin(); it != itr ; )
{
tmp.need += (*it)->owned;
setRes.erase(it++);
}
}
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n ,s ,owned,need;
vector<bool> out;
multiset<PRES,Less_PRES> setRes;
while(1)
{
setRes.clear();
cin>>n>>s;
if(n == 0 && s == 0)
break;
for(int i = 0 ; i < n ; i ++)
{
cin>>owned>>need;
setRes.insert(new SRes(owned,need));
}
out.push_back(res_alloc(n,s,setRes));
}
for(unsigned int i = 0 ; i < out.size() ; ++i)
{
if(out[i]) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
bool res_alloc(int n ,int s,SRes *res)
{
qsort(res,n,sizeof(SRes),cmp);
for(int i = 0 ; i < n ; i ++)
{
if(s < res[i].need)
{
return false;
}
else s+= res[i].owned;
}
return true;
}