hdu 6653 Halt Hater

在无限大的方格平面上,在十字路口左转代价为a,直行代价为b,右转不消耗代价,问从(0,0)到(x,y)的最小代价是多少。

不知道题解怎么想的,写得很复杂,实际上推一下把几个可能的距离取最小就好了。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. ll a,b,x,y;int T;
  5. ll calc(ll x, ll y){
  6. 	x=abs(x);y=abs(y);
  7. 	return min(min(min(x,y)*a+(x+y-min(x,y)*2)*b,((x+y)/2+abs(x-y)/2)*a+b*((x+y)&1)),(x+y)*b);
  8. }
  9. int main(){	
  10. 	scanf("%d",&T);
  11. 	while (~scanf("%lld%lld%lld%lld",&a,&b,&x,&y))
  12. 		printf("%lld\n",min(min(calc(x,y),calc(x,y+1)),min(calc(x-1,y),calc(x-1,y+1))));
  13. 	return 0;
  14. }

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注