題目:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2829
題解:
按照J從大到小的順序給各個人物排序,然後依次交代。
代碼:
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
using namespace std;
const int maxn=1000+5;
struct p
{
int b,j;
}a[maxn];
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
int cmp(const void *a,const void *b)
{
p* c=(p*)a;
p* d=(p*)b;
return d->j-c->j;
}
int main()
{
int n;
int kase=0;
while(~scanf("%d",&n))
{
if(n==0) break;
int i;
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].b,&a[i].j);
}
qsort(a,n,sizeof(a[0]),cmp);
int ans=0;
int s=0;
for(i=0;i<n;i++)
{
s+=a[i].b;
ans=max(ans,s+a[i].j);
}
printf("Case %d: %d\n",++kase,ans);
}
return 0;
}
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1005;
struct Job
{
int b,j;
bool operator < (const Job& x) const{
return j>x.j;
}
}a[maxn];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n;
int kase=1;
while(~scanf("%d",&n))
{
if(n==0) break;
int i,b,j;
for(i=0;i<n;i++)
{
scanf("%d%d",&b,&j);
a[i].b=b;
a[i].j=j;
}
sort(a,a+n);
int s=0;
int ans=0;
for(i=0;i<n;i++)
{
s+=a[i].b;
ans=max(ans,s+a[i].j);
}
printf("Case %d: %d\n",kase++,ans);
}
return 0;
}