Hero
Time Limit : 6000/3000ms (Java/Other) Memory Limit : 65536/65536K (Java/Other)
Total Submission(s) : 22 Accepted Submission(s) : 7
There are two key attributes for the heroes in the game, health point (HP) and damage per shot (DPS). Your hero has almost infinite HP, but only 1 DPS.
To simplify the problem, we assume the game is turn-based, but not real-time. In each round, you can choose one enemy hero to attack, and his HP will decrease by 1. While at the same time, all the lived enemy heroes will attack you, and your HP will decrease by the sum of their DPS. If one hero's HP fall equal to (or below) zero, he will die after this round, and cannot attack you in the following rounds.
Although your hero is undefeated, you want to choose best strategy to kill all the enemy heroes with minimum HP loss.
1 10 2 2 100 1 1 100
20 201这是贪心的方法,在干的时候一定要对付那些那些DPS值/DP值高的hero,这样所受伤害才最少,平时多玩玩游戏多重要啊#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct info { int dps; int dp; double avg;
}unit[100]; int cmd(info x,info y) { return x.avg>y.avg;
}
int main() { int i,j,k,n,s; int sum,co; while(scanf("%d",&n)!=EOF) {
for(i=0;i<n;i++) { scanf("%d%d",&unit[i].dps,&unit[i].dp); unit[i].avg=(unit[i].dps*1.0)/(unit[i].dp*1.0); } sort(unit,unit+n,cmd); //for(i=0;i<n;i++) //printf("%d %d\n",unit[i].dps,unit[i].dp); s=0; sum=0; for(i=0;i<n;i++) { s=0; k=unit[i].dp; //printf(" kkk %d\n",k); for(j=i;j<n;j++) s=s+unit[j].dps; //printf(" sss %d\n",s); sum=sum+s*k; } printf("%d\n",sum);
}
return 0; }