这也属于一个贪心题。关键是排序的依据。

这题排序的依据是敌人的伤害/血量(DPS/HP),不难证明,当这个比值相同时,不论先解决谁效果是相同的。思路大部分在注释里。

题目大意:

  假设你的血量无限,但是你的伤害每次只有1点。现在你有N个敌人,给出他们的血量和伤害,要你在损失血量最少的情况下,解决所有敌人。

样例输入:(第一行整数N指有N个敌人,后面N行输入对应敌人的血量和伤害)

1

10 2

2

100 1

1 100

样例输出:

20

201

#include<iostream>
#include<algorithm>
using namespace std;
struct DOTA//保存敌军的血量和伤害
{
double HP,DPS;
}; bool comp(DOTA a,DOTA b)//按照(伤害)/(血量)进行降序排序。即优先解决伤害高、血量少的
{
return a.DPS/a.HP>b.DPS/b.HP;
} int main()
{
int n,i;
DOTA hero[];
while(cin>>n)
{
double lose=,harm=;
for(i=;i<n;i++)
{
cin>>hero[i].HP>>hero[i].DPS;
harm+=hero[i].DPS;//第一次受到的总伤害
}
sort(hero,hero+n,comp);
for(i=;i<n;i++)
{
lose+=harm*hero[i].HP;//把每次丢失的血量进行累加
harm-=hero[i].DPS;//解决掉一个后对应的总伤害要减掉
}
cout<<lose<<endl;
}
return ;
}

2016HUAS_ACM暑假集训2K - Hero(英雄)的更多相关文章

  1. 2016HUAS_ACM暑假集训4C - 递推

    题目大意:给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形. 这里我们可以这样看: 对于行:假如是m单位长度,则长度为1的矩形有m个,长度为2的矩形有m-1个......长度为m的只有1 ...

  2. 2016HUAS_ACM暑假集训4A - 递推

    利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. 杨辉三角+二项式定理,还真是挺有“意思”的一道题.说实话,非原创.见谅... ...

  3. 2016HUAS_ACM暑假集训4D - 计数,排列

    一个错排公式的基础应用. 大致题意:求n个数的错误排列方式.(每个都要错) 在这里先贴一下错排公式:D(1)=0:D(2)=1:D(n)=(n-1)*(D(n-1)+D(n-2)) 它的推导也非常有意 ...

  4. 2016HUAS_ACM暑假集训4M - 基础DP

    简单的0-1背包问题,大家都会做的.题意不想解释太多. 简述题目的案例及以几个关键 Sample Input 1                            //测试组数T 5 10     ...

  5. 2016HUAS_ACM暑假集训4K - 基础DP

    我不知道怎么用DP,不过DFS挺好用.DFS思路很明显,搜索.记录,如果刚好找到总价值的一半就说明搜索成功. 题目大意:每组6个数,分别表示价值1到6的物品个数.现在问你能不能根据价值均分. Samp ...

  6. 2016HUAS_ACM暑假集训4F - 数论

    这个题目,如果没找到方向,确实有点一头雾水.但是如果你找对方向了,AC是分分钟的事.答案就是看n和m是否有除1之外的公约数. 简单证明:设n和m最大公约数不是1,假设为p.n和m总可以化为一个数乘以k ...

  7. 2016HUAS_ACM暑假集训4B - 递推

    这种数学推理题目题意极其明显,在做的时候,可以多写几组,这样找起规律来会容易些.概括起来就是:题意简单暴力,案例毫无价值. 一个三角形最多可以把一个平面分成两部分,两个三角形最多是8(2+6)部分,而 ...

  8. 2016HUAS_ACM暑假集训3G - 还是畅通工程

    最小生成树,题目简单.套的Prim模板,其他的题目比较有意义. Sample Input 3                             //村庄个数1 2 1               ...

  9. 2016HUAS_ACM暑假集训3F - Jungle Roads

    这个题目属于最小生成树问题,可以用Prim,也可以用Kruskal(还没试).题意简单直接,给你一个图,求出它最小生成树的权值. 题目最有趣的地方就是图的顶点是字母,稍微处理一下就好了. Sample ...

随机推荐

  1. js中attr 与find 获取属性值,

    一.attr的用法 1. attr(属性名)        //获取属性的值(取得第一个匹配元素的属性值.通过这个方法可以方便地从第一个匹配元素中获取一个属性的值.如果元素没有相应属性,则返回 und ...

  2. hdu2297Run(凸包的巧妙应用)

    链接 很巧妙的一道题,参考 把距离和速度分别作为x和y坐标,以斜率代表追赶速率,简直炫酷~ 具体看上面的博客,画的很清楚,就不再抄写一遍了. #include <iostream> #in ...

  3. First Day

    以后这里将记录我的成长脚步啦~~ 欢迎吐槽 作为一个大三即将面临找工作的学渣,心中真的很焦急 要好好学前端!! Fighting~

  4. SG函数 专题练习

    [hdu1536][poj2960]S-Nim 题意 题意就是给出一个数组h,为每次可以取石子的数目. 然后给你n堆石子每堆si.求解先手能不能赢? 分析 根据\(h\)数组预处理出\(sg[i]\) ...

  5. Bootstrap自带的chart插件

    <!doctype html> <html> <head> <title>Line Chart</title> <script src ...

  6. mysql 二进制日志

      1.日志类型   二进制日志记录了所有对mysql数据库的修改事件,包括增删改事件和对表结构的修改事件.   2.配置使用二进制日志 在my.ini 配置 log-bin=mysql-bin   ...

  7. java_easyui体系之目录 [转]

    摘要:简单介绍form的提交方式.与validatebox的结合使用. 一:form简介 Easyui中的form有两种提交方式.结合自己新添加的一种ajax提交方式.本文简单说明form的三种提交方 ...

  8. Gridview布局界面练习Simple Adapter

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZcAAAJcCAIAAAC6w36wAAAgAElEQVR4nOy953YbS5KuvVsiTFWlz6

  9. Regsvr32.exe 用法

    RegSvr32.exe 具有以下命令行选项:  Regsvr32 [/u] [/n] [/i[:cmdline]] dllname /u - 取消注册服务器 /i - 调用 DllInstall,为 ...

  10. 关于DButils的简单介绍

    android中的orm框架,一行代码就可以进行增删改查:支持事务,默认关闭:可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名)等等 ...