小蚂蚁搬家<贪心>
题意:
由于预知未来可能会下雨,所以小蚂蚁决定搬家。它需要将它的所有物品都搬到新家,新家的体积为V,小蚂蚁有N件物品需要搬,每件物品的体积为Ai,但他发现:每件物品需要新家剩余体积大于等于Bi才能使它将物品搬进新家放好,请你帮它计算它是否能将所有物品搬进新家?
题解:
贪心。策略为按每件物品ci(=bi-ai)由大到小排序。若ci相等,吧bi大的放在前面。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
int vi;
int bi;
int c;
bool operator<(const node x)const
{
if(x.c==c)return x.bi<bi;
else return x.c<c;
}
}a[1000+5];
int main ()
{
int v,n;
while(~scanf("%d%d",&v,&n))
{
int sum=0;
for(int i=0;i<n;i++){
scanf("%d%d",&a[i].vi,&a[i].bi);
a[i].c=a[i].bi-a[i].vi;
sum+=a[i].vi;
}//输入数据
sort(a,a+n);
int flag=1;
for(int i=0;i<n;i++)
{
if(v<a[i].bi){printf("No\n");flag=0;break;}
v-=a[i].vi;
}
if(flag)
printf("Yes\n");
}
return 0;
}
想的太多,做的太少。