http://acm.hdu.edu.cn/showproblem.php?pid=4310
这个题 根据优先级排个序就可以了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<cmath>
#define LL long long
using namespace std;
const int N=30;
struct node
{
int H,D;
}mem[N];
bool cmp(node a,node b)
{
return (a.H*(a.D+b.D)+b.H*b.D)<(b.H*(a.D+b.D)+a.H*a.D);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(int i=0;i<n;++i)
{
scanf("%d %d",&mem[i].D,&mem[i].H);
sum+=mem[i].D;
}
sort(mem,mem+n,cmp);
LL ans=0;
for(int i=0;i<n;++i)
{
ans+=(LL)(sum*mem[i].H);
sum-=mem[i].D;
}
cout<<ans<<endl;
}
return 0;
}
浙公网安备 33010602011771号