Codeforces 1421D. Hexagons(思维+优化)

题目链接

题意:

给出你蜂巢的地图,让你从(0,0)出发,你要到达(x,y),你现在有6种操作,如图所示,每种操作都有一个费用,询问最小到达终点的费用。
在这里插入图片描述

思路:

他我们首先这样看
在这里插入图片描述

我们可以通过这两条线路到达,我们呢为了最优到目标点,可以直接到达他的斜边,也可以就是绕开去,为的就是优化线路1,这我们再将2-6的线路优化就OK了,这是优化线路.

剩下的就需要我们来判断走那些路线,如果他(x>0&&y>0)就是他在1号线路的那边,如果(x<0&&y<0) 那就是走4号线路,它可以直接到,但是如果是(x>0&&y<0)那么就不能直接用2号或3号线路.因为没有(+,-)的线路所以我们只能用2号加3号两条线路合并完成.(-,+)也还是这样.

void solve()
{
    scanf("%lld %lld", &x, &y);
    ll c1, c2, c3, c4, c5, c6;
    scanf("%lld %lld %lld %lld %lld %lld", &c1, &c2, &c3, &c4, &c5, &c6);
    c1 = min(c1, c6 + c2);
    c2 = min(c2, c1 + c3);
    c3 = min(c3, c2 + c4);
    c4 = min(c4, c3 + c5);
    c5 = min(c5, c4 + c6);
    c6 = min(c6, c5 + c1);
    if(x >= 0 && y >= 0)
    {
        if(x > y)
            printf("%lld\n", y * c1 + (x - y) * c6);
        else
            printf("%lld\n", x * c1 + (y - x) * c2);
    }
    else if(x <= 0 && y <= 0)
    {
        if(x < y)
            printf("%lld\n", -y * c4 - (x - y) * c3);
        else
            printf("%lld\n", -x * c4 - (y - x) * c5);
    }
    else if(x >= 0 && y <= 0)
        printf("%lld\n", x * c6 - y * c5);
    else if(x <= 0 && y >= 0)
        printf("%lld\n", -x * c3 + y * c2);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值