【题意】给定a,b,c,在天平左边放置若干重量a的砝码,在天平右边放置若干重量b的砝码,使得天平两端砝码差为c。设放置x个A砝码和y个B砝码,求x+y的最小值。
【算法】数论(扩展欧几里德算法)
【题解】问题转化为求满足方程ax+by=c,|x|+|y|的最小值。
先用扩展欧几里得算法求得通解。
由原方程得答案分布在y=-a/b*x+c/b(a>0,b>0,c>0),因此是k<0,b>0的直线。
由于斜率一定,min{|x|+|y|}一定出现在x轴两侧或y轴两侧,判断一下即可。
数据比较弱,所以网上很多题解都是最小非负x和y,反例:1 10 29。