博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电ACM——4310,Hero(贪心)
阅读量:4049 次
发布时间:2019-05-25

本文共 958 字,大约阅读时间需要 3 分钟。

题意:有N个敌人,每个敌人都有血条HP和伤害DPS,你的HP无限,伤害固定为1,而且你在攻击敌人的同时,所有HP不为0的敌人都能攻击你。求出击杀所有敌人所需的最小HP损失。

原题链接:

分析:此题跟Protecting The Flowers很相似,用类似的算法解决。

伪代码如下:

输入n
sum=s=0;
for(i=0;i<=n-1;i++)
{
scanf("%lf%lf",&d[i],&h[i]); //d[i]为伤害,h[i]为血条
v[i]=h[i]/d[i]; //v[i]为衡量哪个敌人先杀的权值,小的先杀,大的后杀,同flowers那道题一样
s+=d[i];
}
sort(n); //选择排序即可
for(i=0;i<=n-1;i++)
{
sum+=s*h[i];
s-=d[i];
}
输出sum;

代码如下:

#include
using namespace std;double h[25],d[25],v[25];void sort(int n){ int i,j,k; for(i=0;i<=n-2;i++) { k=i; for(j=i+1;j<=n-1;j++) { if(v[k]>v[j]) k=j; } if(k!=i) { double t; t=v[i],v[i]=v[k];v[k]=t; t=h[i];h[i]=h[k];h[k]=t; t=d[i];d[i]=d[k];d[k]=t; }// printf("%.2lf %.2lf %.2lf\n",d[i],h[i],v[i]); }}int main(){ int n,i; long long sum,s; while(~scanf("%d",&n)) { sum=s=0; for(i=0;i<=n-1;i++) { scanf("%lf %lf",&d[i],&h[i]); v[i]=h[i]/d[i]; s+=d[i]; } sort(n); for(i=0;i<=n-1;i++) { sum+=s*h[i]; s-=d[i]; } printf("%lld\n",sum); } return 0;}

转载地址:http://bfdci.baihongyu.com/

你可能感兴趣的文章
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>