题目链接
题意:
给出你蜂巢的地图,让你从(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);
}