POJ2142 The Balance【二元一次方程】

2024-06-15 05:18

本文主要是介绍POJ2142 The Balance【二元一次方程】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:

http://poj.org/problem?id=2142


题目大意:

有一个天平,还有质量为a和质量为b的砝码,砝码的数量不限且天平左右两端均可放砝码,现在要求

在天平上惩处质量为c的物品。那么问题来了:怎样放置砝码,才能使放置的砝码数量尽可能的少;当

砝码数量相同时,总质量尽可能的少。


思路:

假设放置x个质量为a的砝码和y个质量为b的砝码,题目就变为了求解a*x + b*y = c的其中一组解,使

|x| + |y|尽可能小,若相等,则a|x| + b|y|尽可能小。设d = gcd(a,b),首先用扩展欧几里得算法出

a/d*x + b/d*y = c/d的一组一组解(x0,y0),那么通解就可以表示为x = x0 + b/d *t,y = y0 - a/d *t。

|x| + |y| = |x0 + b/d*t| + |y0 - a/d*t|。这是一个分段函数,|x0 + b/d*t|单调递增,|y0 - a/d*t|先单

调递减再单调递增。设a > b,则斜率 a/d > b/d,那么 |x| + |y| = |x0 + b/d*t| + |y0 - a/d*t| 总的函

数在 t < y0*d/a 的时候单调递减,在 t >= y0*d/a的时候单调递增。那么|x| + |y|在 t = y0*d/a取得最

小值因为x、y都为整数,t也是整数,所以最小值就在t的上下范围内取整,然后比较两者大小即可得到

结果。


还有一种方法,虽然照做了。。。但是还是不理解。希望大神帮忙解答。

设d = gcd(a,b),首先用扩展欧几里得算法出a/d*x + b/d*y = c/d的一组一组解(x0,y0),得到根据

方程来看,因为a、b都为正整数,则x为正数,则y为0或负数,若果x为0为负数,则y为正数。先求

出 |x| 的最小值x1为 (x0%b + b) % b,得出|y|的值y1 = |(c/d - a/d*x0)/(b/d)|。同理,也可求出 |y|

小值y2为 (y0%a + a) % a,再得出|x|的值x2 = |(c/d - b/d*y0)/(a/d)|。比较x1+y1和x2+y2的值,较小

的就是|x| + |y|最小结果。不清楚为什么这样可以AC。参考博文:http://blog.csdn.net/wmn_wmn/article/details/7800547


AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define LL __int64
using namespace std;LL GCD(LL a,LL b)
{if(b == 0)return a;return GCD(b,a%b);
}void ExGCD(LL a,LL b,LL &d,LL &x,LL &y)
{if(!b){x = 1;y = 0;d = a;}else{ExGCD(b,a%b,d,y,x);y -= x*(a/b);}
}int main()
{LL a,b,c,temp,d;while(cin >> a >> b >> c && (a||b||c)){LL x0,y0;LL gcd = GCD(a,b);a /= gcd;b /= gcd;c /= gcd;ExGCD(a,b,d,x0,y0);LL x,y,x1,y1,x2,y2;x1 = x0*c;x1 = (x1%b + b)%b;y1 = (c - a*x1)/b;if(y1 < 0)y1 = -y1;y2 = y0*c;y2 = (y2%a + a)%a;x2 = (c - b*y2)/a;if(x2 < 0)x2 = -x2;if(x1+y1 < x2+y2)x = x1,y = y1;elsex = x2,y = y2;cout << x << ' ' << y << endl;}return 0;
}


这篇关于POJ2142 The Balance【二元一次方程】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062526

相关文章

一元分类、二元分类、多类分类、多标签学习

unary classification -- 一元分类 维基百科中的定义是:一类分类,即一元分类,通过仅包含该类的对象的训练数据中学习,试图能够在所有对象中识别该特定类的对象。 one-class classification是由[Moya & Hush][1]在1996年提出的,目前已有很多这方面的研究。一个类似的问题是PU Learning,后者是以半监督的学习方式从正类样本和未标记样本

机器学习之监督学习(二)二元逻辑回归

机器学习之监督学习(二)逻辑回归(二元分类问题) 1. 分类 classification2.二元分类逻辑回归 binary-classified logistic regression模块1: sigmoid 激活函数 sigmoid function模型公式模块2: 决策边界 decision boundary代价函数梯度下降欠拟合与过拟合、正则化模块3:评价指标数据集的平衡性平衡数据集

第十五题(二元查找树镜像翻转)

微软面试100题第十五题 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 /\ /\ 11 9 7 5 定义二元查找

poj 1837 Balance 二维费用背包

题意: 给你c(2<=c<=20)个挂钩,g(2<=g<=20)个砝码,求在将所有砝码(砝码重1~~25)挂到天平(天平长 -15~~15)上,并使得天平平衡的方法数....... 思路:(这是我木有想到的)将g个挂钩挂上的极限值:15*25*20==7500 那么在有负数的情况下是-7500~~7500 以0为平衡点...... 那可以将平衡点往右移7500个单位,范围就是0~~1500

poj 1837 Balance(01背包 天平平衡)

题目大意: 有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。 其中可以把天枰看做一个以x轴0点作为平衡点的横轴 输入: 2 4 //C 钩子数 与 G钩码数 -2 3 //负数:左边的钩子距离天平中央的距离;正数:右边的钩子距离天平中央的距离c[k] 3 4 5 8 //G个重物的质量w[i]

对于二元加法序列密码,已知输入序列M为0x23456789,密钥序列Z为0x87654321,求输出序列C。

题解: 1.分析: 加密:依次把明文序列与密钥序列中的对应项做异或,也叫二元加法运算 解密:密钥序列与密文序列中的对应项做二元加法运算(异或) 2.操作   (1)输入序列化为二进制 输入序列 转为二进制 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 tips(十进制化二进

不重复打印排序数组中相加和为给定值的所有二元组和三元组

//不重复打印排序数组中相加和为给定值的所有二元组和三元组public class GetArrNum{//(1)获得排序数组中为给定值的二元组public static void GetArrNum2(int []arr,int k){if(arr==null||k<arr[0]||arr.length<2){return;}//设置两个指针int i=0;int j=arr.leng

poj 1702(Eva's Balance)

题目链接:点击打开链接 题目大意:有些3的幂的重量的砝码,现在给定任意一质量的重物,现在要求怎么样放置才能平衡 题目分析:将重物转化为三进制(0,1,2),先要分成3的幂,所以见2 就要想办法变为1,见1如果有前面的进位,那么也要进行进位。                    最终得到的没有2的数则为右边的重量,左边的所需要的则是刚才调整时用到的重量 由于是自己做法,有点搓欢迎斧正

力扣930.和相同的二元子数组

力扣930.和相同的二元子数组 哈希表法 最终[l,r]区间和为goal sum为记录的非递减前缀和 sum[r] - sum[l] = goal因此遍历右端点时 找到左端点为sum[l]的出现次数即可 class Solution {public:int numSubarraysWithSum(vector<int>& nums, int goal) {int n = nums.s

MATLAB基础应用精讲-【数模应用】二元Logit分析(最终篇)(附python、MATLAB和R语言代码实现)

目录 算法原理 SPSSAU 1、二元logistic分析思路说明 2、如何使用SPSSAU进行二元logistic操作 3、二元logistic相关问题 算法流程 一、分析前准备 1、确定分析项 2.多重共线性判断 3.数据预处理 二、回归基本情况分析 三、模型拟合评价 1、似然比检验 2、拟合优度检验 四、回归分析结果解读 1.R方值分析 2.模型公式 3.