Codeforces 487A Fight the Monster



A monster is attacking the Cyberland!

Master Yang, a braver, is going to beat the monster. Yang and the monster each have 3 attributes: hitpoints (HP), offensive power (ATK) and defensive power (DEF).

During the battle, every second the monster's HP decrease by max(0, ATKY - DEFM), while Yang's HP decreases by max(0, ATKM - DEFY), where index Y denotes Master Yang and index M denotes monster. Both decreases happen simultaneously Once monster's HP ≤ 0 and the same time Master Yang's HP > 0, Master Yang wins.

Master Yang can buy attributes from the magic shop of Cyberland: h bitcoins per HP, a bitcoins per ATK, and d bitcoins per DEF.

Now Master Yang wants to know the minimum number of bitcoins he can spend in order to win.

Input

The first line contains three integers HPY, ATKY, DEFY, separated by a space, denoting the initial HP, ATK and DEF of Master Yang.

The second line contains three integers HPM, ATKM, DEFM, separated by a space, denoting the HP, ATK and DEF of the monster.

The third line contains three integers h, a, d, separated by a space, denoting the price of HP, ATK and DEF.

All numbers in input are integer and lie between 1 and 100 inclusively.

Output

The only output line should contain an integer, denoting the minimum bitcoins Master Yang should spend in order to win.

Examples
Input
1 2 1
1 100 1
1 100 100
Output
99
Input
100 100 100
1 1 1
1 1 1
Output
0
Note

For the first sample, prices for ATK and DEF are extremely high. Master Yang can buy 99 HP, then he can beat the monster with 1 HP left.

For the second sample, Master Yang is strong enough to beat the monster, so he doesn't need to buy anything.

把所有的攻击力与防御力的可能枚举一遍(所需血量是可以通过这两个值计算出来的),取最小的花费。

#include<stdio.h>
#include<algorithm>
using namespace std;
struct p
{

    int atk;
    int def;
    int cost;

}c[20005];
bool cmp(p aa,p bb)
{
    return aa.cost<bb.cost;
}
int main()
{

    int yh,ya,yd,ma,md,mh,moh,moa,mod;
    int s=0;
    int cost=0;
    scanf("%d%d%d",&yh,&ya,&yd);
    scanf("%d%d%d",&mh,&ma,&md);
    scanf("%d%d%d",&moh,&moa,&mod);
    while (ya<=md)
    {
        ya++;
        cost=cost+moa;
    }
    for (int i=0;i<=100;i++)
    {
        for (int j=0;j<=100;j++)
        {
            s++;
            c[s].atk=ya+i;
            c[s].def=yd+j;
            if ((ma-c[s].def)<=0)
            {
                c[s].cost=cost+(c[s].def-yd)*mod+(c[s].atk-ya)*moa;
                break;
            }
            if ((mh%(c[s].atk-md))==0)
            {

                if (yh-(mh/(c[s].atk-md))*(ma-c[s].def)<=0)
                {
                    c[s].cost=cost+(c[s].def-yd)*mod+(c[s].atk-ya)*moa+moh*(-yh+(mh/(c[s].atk-md))*(ma-c[s].def))+moh;
                }
                else
                {
                     c[s].cost=cost+(c[s].def-yd)*mod+(c[s].atk-ya)*moa;
                }

            }
            if ((mh%(c[s].atk-md))!=0)
            {
                if (yh-(mh/(c[s].atk-md)+1)*(ma-c[s].def)<=0)
                {
                    c[s].cost=cost+(c[s].def-yd)*mod+(c[s].atk-ya)*moa+moh*(-yh+(mh/(c[s].atk-md)+1)*(ma-c[s].def))+moh;
                }
                else
                {
                     c[s].cost=cost+(c[s].def-yd)*mod+(c[s].atk-ya)*moa;
                }
            }
        }

    }
    sort(c+1,c+s+1,cmp);
    printf("%d\n",c[1].cost);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值