1660:小邪的烦恼(贪心)
小邪酷爱吃橘子,但他的橘子总是被同学们“打劫”。虽然小邪很大方,喜欢和同学们分享他的橘子,但如果和他分享的人太多,他自己就没有橘子吃啦!所以小邪希望找到一个和同学们分享橘子的方案。假设小邪一共有N个橘子,他自己希望至少保留M个给自己吃。小邪一共有K个同学,友好程度可以用一个正整数表示,数值越大表示友好程度越高,而每个同学想得到的橘子数不一定相同。小邪每次都会优先选择和自己关系比较好的同学分享橘子,并且一定会尽量满足他对橘子个数的需求。在此条件下,请你算出小邪最多能和几个同学分享橘子。
Input
输入有多组测试数据 对于每组测试数据 第1行:3个正整数N、M、K 第2~K+1行:每行2个正整数,分别表示表示每个同学对橘子的需求数和与小邪的友好程度。 (对于所有输入均在 0~1000 以内)
Output
对于每一组输入 输出一个正整数表示小邪最多能与多少同学分享橘子。
10 2 5 1 30 2 15 1 10 4 25 2 20
4
#include<stdio.h>
const int maxn=1005;
int a[maxn],b[maxn];
int main ()
{
int n,m,k;
while(scanf("%d %d %d",&n,&m,&k)!=EOF)
{
int t,count=0;
for(int i=0;i<k;i++)
{
scanf("%d %d",&a[i],&b[i]);
}
for(int i=0;i<k-1;i++)
{
for(int j=0;j<k-i-1;j++)
{
if(b[j]<b[j+1]||(b[j]==b[j+1]&&a[j+1]<a[j]))
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
n-=m;
for(int i=0;i<k;i++)
{
if(n>=a[i])
{
count++;
n-=a[i];
}
}
printf("%d\n",count);
}
return 0;
}
想的太多,做的太少。