题意:
对x,y有两种操作
cas 1:
使x,y 其中一个数减1
花费:a 美元
cas 2:
使 x, y 都减1
花费: b 美元
问,使得 x,y 都为0需要的最少花费
注意,x,y,a,b数据范围
思路:
设最少消费需要进行:p 次 cas2,q 次 cas1
则有: q = x + y - 2 * p
设最少消费为s
所以:s = p * b + q * a
带入q:s = p * b + ( x + y - 2 * p) * a
整理得:s = ( b - 2 * a) * p + a * ( x + y )
下面分情况讨论:
(1) b - 2 * a > = 0
当p=0时,s最小
smin=a(x+y)
(2) b - 2 * a < 0
p需要取最大,使得(b-2*a)*p足够小
即:p为x,y较小的一方时,s最小
p=min(x,y);
smin=(b-2*a)*p+a*(x+y)
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define ll long long
int main()
{
int t;
ll s,x,y,a,b;
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld%lld",&x,&y,&a,&b);
if(b>=2*a)
s=(x+y)*a;
else{
ll p=min(x,y);
s=(b-2*a)*p+a*(x+y);
}
printf("%lld\n",s);
}
return 0;
}