http://poj.org/problem?id=2751
源代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 10001
struct node
{
int flag,t,id;
bool operator<(node &a)const
{
return t<a.t;
}
};
int a[N];
int b[N];
node d[N];
node c[N];
int flowshop(int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[i]<b[i])
{
d[i].flag=1;
d[i].t=a[i];
}
else
{
d[i].flag=0;
d[i].t=b[i];
}
d[i].id=i;
}
sort(d,d+n);
int left=0;
int right=n-1;
for(i=0;i<n;i++)
{
if(d[i].flag)
c[left++]=d[i];
else
c[right--]=d[i];
}
int j=a[c[0].id];
int sum=j+b[c[0].id];
for(i=1;i<n;i++)
{
j+=a[c[i].id];
sum=j<sum?sum+b[c[i].id]:j+b[c[i].id];
}
return sum;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
int min=flowshop(n);
printf("%d\n",min);
}
return 0;
}