Codeforces Round #278 (Div. 1) A

本文详细阐述了通过暴力枚举法解决与怪物战斗问题的策略,重点在于优化购买生命值、攻击力和防御力的成本,确保在有限预算下取得胜利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. Fight the Monster


        题意:你和怪物对A,有血、攻、防三个参数。你可以花不同的钱买一个单位的参数,问最少花多少钱买参数能打赢。

        思路:暴力。首先写一个函数判断在一定参数条件下谁能打赢,然后枚举买多少的血、攻、防。有一个坑点,就是买血要枚举到1000+,而攻枚举到200就可以了,因为肯定一刀秒,防枚举到100就可以了,因为肯定不掉血。至于为什么血枚举到1000+,是用极端数据试出来的。。。话说这个题比赛的时候HACK倒一片。


#include<iostream>
#include<cmath>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<string.h>
#include<cstdio>

using namespace std;

bool judge(int a1,int b1,int c1,int a2,int b2,int c2){
	if(b1-c2<=0)return 0;
	if(b1-c2>0&&b2-c1<=0)return 1;
	while(1){
		a1-=max(0,b2-c1);
		a2-=max(0,b1-c2);
		
		if(a1>0&&a2<=0)return 1;
		if(a1<=0)return 0;
	}
	return 0;
}


int main(){
	int a1,b1,c1,a2,b2,c2;
	while(cin>>a1>>b1>>c1>>a2>>b2>>c2){
		int x,y,z;
		cin>>x>>y>>z;
		
		int ans=1000000000;
		for(int i=0;i<=1500;i++){
			for(int j=0;j<=200;j++){
				for(int k=0;k<=100;k++){
					if(i*x+j*y+k*z>=ans)continue;
					if(judge(a1+i,b1+j,c1+k,a2,b2,c2)){
						ans=min(ans,i*x+j*y+k*z);
					}
				}
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值