简单贪心,很容易想到首先消灭攻击力强生命值少的怪物
排序即可
#include<bits/stdc++.h> using namespace std; const int maxn =20 + 7; typedef long long ll; int n; struct node { int d, h; }a[maxn]; bool cmp(node a, node b) { return (a.d*b.h > a.h*b.d); } int main() { while(~scanf("%d", &n) && n) { int sum = 0; for(int i = 0; i < n; ++i) { scanf("%d%d", &a[i].d, &a[i].h); sum += a[i].d; } sort(a, a+n, cmp); int ans = 0; for(int i = 0; i < n; ++i) { ans += (a[i].h * sum); sum -= a[i].d; } printf("%d\n", ans); } return 0; }