简单贪心
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct point { int x,y; double bl; }points[21]; int cp(const void *a,const void *b) { struct point *c=(point *)a; struct point *d=(point *)b; if(c->bl<=d->bl) return 1; else return -1; } int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) { scanf("%d %d",&points[i].x,&points[i].y); points[i].bl=(double)points[i].x/points[i].y; } qsort(points,n,sizeof(points[0]),cp); int sum,sum1=0; for(int i=0;i<n;i++) { sum=0; for(int j=i;j<n;j++) { sum+=points[j].x; } sum*=points[i].y; sum1+=sum; } printf("%d\n",sum1); } return 0; }