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;
}