Codeforces Round #278 (Div. 1) A. Fight the Monster( 暴力)

54 篇文章 0 订阅

题目链接
题意:就是A,B俩人打架,每个人有血量HP,攻击力a,防御d,
然后有商店可以花钱买,血量,攻击力, 防御值. 问A打败B最少花多少钱。A能打败B就是B血量不大于0,A的血量大于0。
解答:题目给出的范围是0-100。首先我们加血是没什么用的,应该加攻击力或者防御力。然后我们枚举加攻击力和防御力的组合情况。结合题目的数据范围,我们知道防御最大也就是加到100,然后攻击力,我们可能的最大也就是200(比如我们的攻击力是0,对面防御100,他的血量100,我们只要200攻击力就OK了)



#define CF

#ifndef CF
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#else
#include<bits/stdc++.h>
#endif // CF
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<long long ,long long > P;
const int maxn=100005;
const LL inf=1LL<<50;
const LL mod=1e9+7;


int main(){
    int  h1,h2,a1,a2,d1,d2,h,d,a;
    cin>>h1>>a1>>d1>>h2>>a2>>d2>>h>>a>>d;
    LL ans=inf;
    for(int i=0;i<=200;i++)if(a1+i>d2){//i是加攻击
        for(int j=0;j<=100;j++){//加防御
            int A=a1+i-d2;//A对B每秒造成的伤害
            int B=a2-(d1+j);//B对A 每秒造成的伤害
            int x=(h2+A-1)/A;//B血量没了需要的时间
            int y=h1;
            y-=x*B;
            if(y<=0){
                y=-y+1;
                ans=min(ans,y*h*1LL+i*a+j*d);
            }
            else
                ans=min(ans,i*a+j*d*1LL);
        }
    }
    cout<<ans<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值