HDU4310:Hero

Problem Description

When playing DotA with god-like rivals and pig-like team members, you have to face an embarrassing situation: All your teammates are killed, and you have to fight 1vN.
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.

Input

The first line of each test case contains the number of enemy heroes N (1 <= N <= 20). Then N lines followed, each contains two integers DPSi and HPi, which are the DPS and HP for each hero. (1 <= DPSi, HPi <= 1000)

Output

Output one line for each test, indicates the minimum HP loss.

Sample Input

1
10 2
2
100 1
1 100

Sample Output

20
201

//英语是硬伤。。。要不是看了别人的题解,我真心不知道原来输入时浮点型呀!!!

//这道题直接给我弄迷糊了。。。

//血量少攻击高的要先消灭,即将所有的敌人根据DPS/HP从大到小排序,如果相等,则按HP从小到大排序。

#include <iostream>
#include <algorithm>

using namespace std;

struct node
{
    double hp;
    double dps;
    double bi;
} data[25];

bool cmp(const node &a,const node &b)
{
   if(a.bi>b.bi)
   return true;
   else if(a.bi==b.bi)
   {
       if(a.dps<b.dps)
       return true;
       else return false;
   }
   else return false;
}

int main()
{
    int n;
    double ans;
    while(cin>>n)
    {
        ans=0;
        for(int i=0;i<n;i++)
        {
            cin>>data[i].hp>>data[i].dps;
            data[i].bi=data[i].dps/data[i].hp*1.0;
        }
        sort(data,data+n,cmp);
        for(int i=0;i<n;i++)
        {
            while(data[i].hp)
            {
                for(int j=i;j<n;j++)
                ans+=data[j].dps;
                data[i].hp--;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
时间: 2024-10-08 10:51:48

HDU4310:Hero的相关文章

Angular 2.0 基础:服务

什么是服务(Service) 在Angular 2 中我们提到的服务 service 一般指的是 哪些能够被其他组件或者指令调用的 单一的,可共享的 代码块.当然,通过服务可以将数据和组件分开,这样就可以实现更多的组件共享服务数据,服务能够使我们提高代码的利用率,方便组件之间共享数据和方法,方便测试和维护.在Angualr 文档中我们能看到这样的描述: Multiple components will need access to hero data and we don't want to c

switch语句:适用于一个条件有多个分支的情况---分支语句

例1: 客服选择功能,然后按按键 Console.WriteLine("查花费请按1,查余额请按2,查流量请按3,办理业务请按4,宽带请按5,人工服务请按6,集团业务请按7"); int a = Convert.ToInt32(Console.ReadLine());//选择一个功能 switch (a)// { case 1://语句1 Console.WriteLine("您本月的话费为1000元!"); break;//break是跳出的意思 case 2:/

Java中的设计模式(八):建造者模式

介绍 今天我们将研究java中的Builder模式.Builder 设计模式是一种创造性的设计模式,如工厂模式和抽象工厂模式. 当Object包含许多属性时,引入了Builder模式来解决Factory和Abstract Factory设计模式的一些问题. 当Object包含许多属性时,Factory和Abstract Factory设计模式存在三个主要问题. 从客户端程序传递到Factory类的参数太多,可能容易出错,因为大多数情况下,参数的类型是相同的,而从客户端来说,很难维护参数的顺序.

Javascript常用的设计模式详解

阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javascript中的策略模式 九:Javascript中理解发布--订阅模式 十:理解中介者模式 回到顶部 一:理解工厂模式 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式. 简单的工厂模式可以理解为解决多个相似的问题;这也是她的优点;比如如下代码: function CreateP

Angular 4+ Http

HTTP: 使应用能够对远端服务器发起相应的Http调用: 你要知道: HttpModule并不是Angular的核心模块,它是Angualr用来进行Web访问的一种可选方式,并位于一个名叫@angual/http的独立附属模块中:也就是说:使用http之前要引入此模块; 1.基本使用: import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; impo

SMC --- COCOS2D-X 状态机代码生成工具

一.简介 利用有限状态机来控制对象的行为,其原理就是利用多态,常常我们自己写代码,需要很大篇幅,万一需要再加一个或者几个状态,那么我们自己维护时就会很麻烦,SMC这个工具可以帮助我们解决这个问题. 使用这个工具之前我们需要jdk环境,最新版的SMC支持jdk1.7,之前版本的SMC支持jdk1.6,要想中间没有问题,我们一定要将电脑上的jdk版本与SMC的jdk版本对应起来. 下载地址:http://sourceforge.net/projects/smc/files/ SMC可以通过一个配置文

飞机大战编写以及Java的面向对象总结

面向对象课程完结即可编写一个简单的飞机大战程序.我觉得我需要总结一下 飞机大战中类的设计: 父类:FlyingObject(抽象类) 接口:Award .Enemy 子类:Hero.Bullet.Airplane (实现Enemy接口). Bee (实现Award接口) 运行类:ShootGame Hero.Bullet.Airplane . Bee 均继承自FlyingObject类,FLyingObject具有他们的公共属性以及行为,因为FlyingObject并不需要被实例化,那么大可以将

Cocos2d-x观察者模式其实很简单--之游戏开发《赵云要格斗》(13)

这里是Evankaka的博客,欢迎大家前来讨论与交流------        转载请注明出处http://blog.csdn.net/evankaka 本文主要详细讲解了设计模式中的观察都模式及其在Coco2d-x的简单应用,最后,结合游戏中的技能冷却类放大招进行了一个使用. cocos2d-x版本:2.2.5 工程环境:windows7+VS2010 打开方式:将工程放在cocos2d-x安装目录下的project文件夹下用VS打开 先来看看效果: 本文效果: 一.观察者模式简介 观察者模式

英语中的名词复数结构

目的:学习笔记 概要:名词在表示复数时,除不可数名词外,其他都需要写为名词的复数形式. 不可数名词前面需要用量词修饰,量词有复数. 可数名词分可规则变换(有规律)和不规则变换(靠积累) 变换规则: 1)一般名词结尾 + s ,读音,清音结尾读清音[s],浊音结尾读浊音[z],简称清清浊浊. 2)单词以ch, sh, x, s结尾 +es,读做[iz],特例:hero, negro, tomato, potato也是+es. 3)辅音+y结尾需要把y变为v+es,读做[vz]. 4)单词以f, f