贪心,注意排序条件。
#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 ",ans); } return 0; }