题目链接:https://cn.vjudge.net/problem/HDU-4310

题意

打dota,队友太菜,局势变成1vN。还好你开了挂,hp无限大(攻击却只有一点每秒-_-)。

但是你并不想被A太多下,所以问题来了

给出对面的血量和每秒输出大小

问怎么安排,使得打败所有人后掉血最少

思路

首先可以想到我们必须一个一个打,这样所有人的总输出时间最少

因为如果打A一下,B一下,AB总输出肯定更大

其次考虑1v2的情况,因为1vN同理可得

现有ab两敌人

先打a的总输出为

\[DPS_a*HP_a + DPS_b*(HP_a+HP_b)
\]

先打b的总输出为

\[DPS_b*HP_b + DPS_a*(HP_a+HP_b)
\]

差别就在 $$DPS_bHP_a , DPS_aHP_b $$

代码

#include <cstdio>
#include <algorithm>
using namespace std;
struct Hero{
int hp, dps;
Hero(int hp=0, int dps=0):hp(hp),dps(dps) {}
bool operator < (const Hero &a) const{
return dps*a.hp>a.dps*hp;
}
}heroes[25]; int main(void){
int n;
while (scanf("%d", &n)==1 && n){
for (int i=0; i<n; i++)
scanf("%d%d", &heroes[i].dps, &heroes[i].hp);
sort(heroes, heroes+n); int sum=0, time=0;
for (int i=0; i<n; i++){
time+=heroes[i].hp;
sum+=heroes[i].dps*time;
}printf("%d\n", sum);
} return 0;
}
Time Memory Length Lang Submitted
None 1512kB 621 G++ 2018-02-08 21:55:55

HDU-4310 Hero 贪心问题的更多相关文章

  1. HDU 4310 Hero (贪心算法)

    A - Hero Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  2. HDU 4310 Hero (贪心)

    题意:给定你有 n 个敌人,你的伤害是 1,给出每个敌人的伤害,和敌人的血量,每一回合你可以攻击一个敌人,并且所有敌人都会攻击你,除非它已经死了,问你最少要多少要消耗多少血量. 析:一个很明显的贪心问 ...

  3. hdu 4310 Hero

    这道题是道算是一道很简单的贪心题了,但是要注意排序的依据,这道题是按照dps/hp的从大到小排序的,然后计算总的sumhp即可. #include"iostream" #inclu ...

  4. Hdu 4864(Task 贪心)(Java实现)

    Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...

  5. D - 淡黄的长裙 HDU - 4221(贪心)

    D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...

  6. HDU 4310 贪心

    题意 在游戏中你的dps为1但是hp无限 给出n个敌人的dps与hp 你一秒能打掉一个敌人你的dps的hp 当你输出的时候 所有活着的敌人都会打你 求杀死所有敌人时你掉的最少hp 一开始想错了 排序的 ...

  7. hdu 2037简单贪心--活动安排问题

    活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子.该问题要求高效地安排一系列争用某一公共资源的活动.贪心算法提供了一个简单.漂亮的方法使得尽可能多的活动 ...

  8. HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...

  9. hdu 4268 multiset+贪心

    Alice和Bob有n个长方形,有长度和宽度,一个矩形可以覆盖另一个矩形的条件的是,本身长度大于等于另一个矩形,且宽度大于等于另一个矩形,矩形不可旋转,问你Alice最多能覆盖Bob的几个矩形? /* ...

  10. hdu 4864 Task (贪心 技巧)

    题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...

随机推荐

  1. Ubuntu 18.04 关闭GUI

    在安装显卡驱动时, 可能需要关闭GUI, 在终端中输入: sudo service gdm3 stop

  2. ie浏览器下get方式获取数据无效问题

    在ie浏览器用get方式获取数据时因为发送得到参数地址都是一样的,所以浏览器会优先从缓存获取数据,而不去服务器请求数据,post由于参数不同所以不会影响. 解决方法: 1.  Internet选项-- ...

  3. servlet中怎么注入service

    在工作中使用到spring的mvc框架,分为controller/service/dao三个层次.偶尔会用到servlet替换掉controller,这就遇到如何在servlet中使用注入到sprin ...

  4. sqlserver 恢复模式及避免日志爆满的方法

    recovery simple 循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点: 用于落地数据或测试环境或OLAP,不推荐用于生产OLTP 有时候distribution过大也 ...

  5. 解决IE7、IE8样式不兼容问题

    方法:要在页面中加入如下HTTP meta-tag: <meta http-equiv="X-UA-Compatible" content="IE=EmulateI ...

  6. firewall 实现数据的端口转发

    端口转发:firewall-cmd --add-port=80/tcp firewall-cmd --add-port=10050/tcp firewall-cmd --add-forward-por ...

  7. java 实现多线程 3种方式

    java实现多线程可以有以下三种方式: (1)继承Thread 类,重写其run()方法: (2)实现Runnable接口,实现其run() 方法: (3) 实现Callable 接口,重写call( ...

  8. layui计算剩余时间

    <div id="test"></div> <script> layui.use('util', function(){ var util = ...

  9. pyinstall 常见错误

    字符编码错误: https://blog.csdn.net/weixin_42426496/article/details/81102665 https://blog.csdn.net/qq_4206 ...

  10. LINUX 中 python 版本升级

    首先下载源tar包 可利用linux自带下载工具wget下载,如下所示: 1 # wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tg ...