题意 : 1 vs N 对方有伤害值与HP属性,我方一次只能减对方1滴血,回合制,求最优策略
思路: 从伤害高血量少的开始 即:return DPS * a.HP > a.DPS * HP;
wa: 刚开始贪心策略出错,只考虑了伤害
代码:
#include<iostream>
#include<queue>
#include<stack>
#include<cstring>
#include<stdlib.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
#define MAX 10005
int N;
struct node{
LL HP, DPS;
bool operator < (const node &a){
return DPS * a.HP > a.DPS * HP;
}
}p[21];
int sum;
int main(){
while(cin >> N){
for(int i = 0; i < N; i++){
cin >> p[i].DPS >> p[i].HP;
sum += p[i].DPS;
}
sort(p, p+N);
LL ans = 0;
for(int i = 0; i < N; i++){
ans += (p[i].HP * sum);
sum -= p[i].DPS;
}
cout << ans << endl;
}
return 0;
}