贪心,注意排序条件。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; const int N=25; struct En{
int DSP,HP;
}E[N]; bool cmp(En a,En b){
if(a.DSP*1.0/a.HP>b.DSP*1.0/b.HP)
return true;
return false;
} int main(){
int n;__int64 ans,np;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++)
scanf("%d%d",&E[i].DSP,&E[i].HP);
sort(E,E+n,cmp);
ans=np=0;
for(int i=0;i<n;i++){
np+=(__int64)E[i].HP;
ans+=(np)*(__int64)E[i].DSP;
}
printf("%I64d\n",ans);
}
return 0;
}