poj 2142】的更多相关文章

POJ.2142 The Balance (拓展欧几里得) 题意分析 现有2种质量为a克与b克的砝码,求最少 分别用多少个(同时总质量也最小)砝码,使得能称出c克的物品. 设两种砝码分别有x个与y个,那么有ax+by=c.可用拓展欧几里得求解. 若x与y均为正数,说明在天平的同一侧,否则在不同册. 需要注意的是,求出的x与y仅为一组特解,此时需要求|x| + |y| 的最小值.根据: 可得 显然这是不好求的,但我们不妨设a>b,根据斜率关系,不难作图. 可以看出,最小值在t2附近取得,枚举附近值…
The Balance http://poj.org/problem?id=2142 Time Limit: 5000MS   Memory Limit: 65536K       Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspirin using 3…
嗯... 题目链接:http://poj.org/problem?id=2142 AC代码: #include<cstdio> #include<iostream> using namespace std; inline int _abs(int x){ ) return -x; return x; } inline void exgcd(int a, int b, int &g, int &x, int &y){ ; y = ;} else { exgcd…
#include <cstdio> #include <algorithm> #include <cstring> #include <iostream> using namespace std; int a,b,c; int exgcd(int a,int b,int &x,int &y){ ){ x = ; y = ; return a; } int d = exgcd(b,a%b,x,y); int temp = x; x = y; y…
题意:有两种类型的砝码,每种的砝码质量a和b给你,现在要求称出质量为c的物品,要求a的数量x和b的数量y最小,以及x+y的值最小. 用扩展欧几里德求ax+by=c,求出ax+by=1的一组通解,求出当x取最小合法正整数解时y的取值,当y小于0时,说明应该放在a的另一边,变为正值.同理当y取最小时,可得到另一组解,比较两组解,取最小即可. #include<stdio.h> int ex_gcd(int a,int b,int &x,int &y){ if(!b){ x=,y=;…
原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里得求出方程ax+by=tm的解x0.y0 然后有a*x0+b*y0=tm 令x1=x0*(c/tm),y1=y0*(c/tm) 则a*x1+b*y1=c x1.y1即原方程的一个特解 这个方程的通解:xi=x1+k*(b/m),yi=y1-k*(a/m) 另:如果要求yi的最小非负解?令r=a/tm…
这题实际解不定方程:ax+by=c只不过题目要求我们解出的x和y 满足|x|+|y|最小,当|x|+|y|相同时,满足|ax|+|by|最小.首先用扩展欧几里德,很容易得出x和y的解.一开始不妨令a>b,若a<=b,则交换a和b.设d=gcd(a,b),最终的则x=x0+b/d*t,y=y0-a/d*tz=|x|+|y|=|x0+b/d*t|+|y0-a/d*t|实际上就是求z=|a1*t+c1|+|c2-a2*t|在t取何值时最小.(a2>a1)首先由不定方程ax+by=c,a>…
先做出两个函数的图像,然后求|x|+|y|的最小值.|x|+|y|=|x0+b/d *t |+|y0-a/d *t| 这个关于t的函数的最小值应该在t零点附近(在斜率大的那条折线的零点附近,可以观察出来).以下三种情况中,函数最小值都应该出现在B点附近./* 对于不定整数方程xa+yb=c,若 c mod Gcd(a, b)=0,则该方程存在整数解,否则不存在整数解. 上面已经列出找一个整数解的方法,在找到x * a+y * b = Gcd(a, b)的一组解x0,y0后 ,/*x * a+y…
题意:有两种砝码m1, m2和一个物体G,m1的个数x1,  m2的个数为x2, 问令x1+x2最小,并且将天平保持平衡 !输出  x1 和 x2 题解:这是欧几里德拓展的一个应用,欧几里德求不定方程ax+by=c: 先介绍一下: 1. ax+by=gcd(a, b)  相当于a,b互素.则同过欧几里德拓展,有整数解x, y 2.对于 ax+by=c  则转化为  两边同时除以c 再乘以 gcd(a/c, b/c)  这样就化成了 1结论! 3.求一个x的最小值为 x=x*c/gcd(a, b)…
题目链接:https://cn.vjudge.net/contest/276376#problem/E 题目大意:给你n,m,k,n,m代表当前由于无限个质量为n,m的砝码.然后当前有一个秤,你可以通过秤的左边和右边的砝码种类和数目,能够测出m的质量,然后问你使用两个砝码总和最少的情况. 具体思路:和前面几个题的思路一样,列出等式Ax+By=C,然后再通过扩展欧几里得去解这个式子,当前一共有两组解,一个是通过x,解出y.另一个是通过y,解出x.我们就取这两种的总和最小的情况就可以了.注意x和y都…