NKOJ1828 【USACO3.2.4】Feed Ratios饲料调配
时间限制 : 10000 MS 空间限制 : 65536 KB

问题描述
农夫约翰从来只用调配得最好的饲料来喂他的奶牛。饲料用三种原料调配成:大麦,燕麦和小麦。他知道自己的饲料精确的配比,在市场上是买不到这样的饲料的。他只好购买其他三种混合饲料(同样都由三种麦子组成),然后将它们混合,来调配他的完美饲料。
给出三组整数,表示 大麦:燕麦:小麦 的比例,找出用这三种饲料调配 x:y:z 的饲料的方法。
例如,给出目标饲料 3:4:5 和三种饲料的比例:
1:2:3
3:7:1
2:1:2
你必须编程找出使这三种饲料用量最少的方案,要是不能用这三种饲料调配目标饲料,输出“NONE”。“用量最少”意味着三种饲料的用量(整数)的和必须最小。

对于上面的例子,你可以用8份饲料1,1份饲料2,和5份饲料3,来得到7份目标饲料:
8*(1:2:3) + 1*(3:7:1) + 5*(2:1:2) = (21:28:35) = 7*(3:4:5)
表示饲料比例的整数以及目标饲料的都是小于100的非负整数。表示各种饲料的份数的整数,都小于100。一种混合物的比例不会由其他混合物的比例直接相加得到。

输入格式
Line 1: 三个用空格分开的整数,表示目标饲料
Line 2..4: 每行包括三个用空格分开的整数,表示农夫约翰买进的饲料的比例

输出格式
输出文件要包括一行,这一行要么有四个整数,要么是“NONE”。前三个整数表示三种饲料的份数,用这样的配比可以得到目标饲料。第四个整数表示混合三种饲料后得到的目标饲料的份数。

样例输入
3 4 5
1 2 3
3 7 1
2 1 2

样例输出
8 1 5 7

纯模板…

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int need=4;#define abs(x) (x<0 ? -x : x)int m[need][need+1],a[need][need+1];
int ans[need+1];
bool free_x[need];
int free_tot,free_id;int LCM(int a,int b)
{int aa=a,bb=b;for(int t=a%b;t;a=b,b=t,t=a%b);return aa*bb/b;
}int gauss(int xx,int yy)//x行 y列
{int x=1,y=1,mx,lcm,aa,bb;for(int i,j;x<=xx&&y<yy;x++,y++){mx=x;for(i=x+1;i<=xx;i++) if(abs(m[i][y])>abs(m[mx][y])) mx=i;if(x!=mx) for(i=y;i<=yy;i++) swap(m[x][i],m[mx][i]); if(m[x][y]==0) {x--;continue;}//m[x][y]为该列绝对值最大,若为0,后面都为0 for(i=x+1;i<=xx;i++)if(m[i][y]){lcm=LCM(m[i][y],m[x][y]);aa=lcm/m[x][y];bb=lcm/m[i][y];for(j=y;j<=yy;j++) m[i][j]=m[i][j]*bb-m[x][j]*aa;}}for(int i=x;i<=xx;i++) if(m[i][yy]!=0) return -1;//无解 if(x<xx) {for(int i=1;i<=xx;i++) free_x[i]=true;for(int i=x-1,j,temp;i=1;i--){free_tot=1;for(j=1;j<=yy;j++) if(m[i][j]&&free_x[i]){free_tot++;free_id=i;}if(free_tot>1) continue;temp=m[i][yy];for(j=1;j<yy;j++)if(m[i][j]!=0&&free_id!=j) temp-=m[i][j]*ans[j];if(temp%m[i][i]!=0) return -2;ans[free_id]=temp/m[i][i];free_x[free_id]=false;}return (yy-1)-x;}int temp;for(int i=xx,j;i>=1;--i){temp=m[i][y];for(j=i+1;j<yy;j++) temp-=m[i][j]*ans[j];if(temp%m[i][i]!=0) return -2;ans[i]=temp/m[i][i];}return 0;
}#define END  {puts("NONE");return 0;}int main()
{for(int i=1;i<=3;i++) cin>>a[i][4];for(int i=1;i<=3;i++)for(int j=1;j<=3;j++)cin>>a[j][i];int k=1;while(true){for(int i=1;i<=3;i++) ans[i]=0,free_x[i]=true;memcpy(m,a,sizeof(a));for(int i=1;i<=3;i++) m[i][4]*=k;int t=gauss(3,4);if(t==-1) ENDif(t>=0) {if(t==0) {for(int i=1;i<=3;i++) if(ans[i]<0) ENDfor(int i=1;i<=3;i++) cout<<ans[i]<<" "; }else{for(int i=1;i<=3;i++) if(!free_x[i]&&ans[i]<0) ENDfor(int i=1;i<=3;i++) cout<<(free_x[i] ? ans[i]: 0)<<" "; }cout<<k;return 0;}if(t==-2) k++;if(k>300) END}
}

【例题】【高斯消元】USACO3.2.4 Feed Ratios相关推荐

  1. 【高斯消元】兼 【期望dp】例题

    [总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $           ...

  2. 矩阵与高斯消元【矩阵乘法,高斯消元求线性方程组,求行列式】 全网最详,附例题与姊妹篇 一万三千字详解

    (详解)矩阵快速幂详解与常见转移矩阵的构造_秦小咩的博客-CSDN博客_矩阵快速幂转移矩阵 目录 矩阵乘法 矩阵快速幂 伪代码模板 例题一 例题2 例题三 例题四 高斯消元 整形高斯消元 浮点型高斯消 ...

  3. 浅谈高斯消元的实现和简单应用

    一.高斯消元的原理 对于n元的m个线性方程组成的方程组,我们将其以矩阵的形式记录下来: a11 a12 a13 ...... a1n b1 a21 a22 a23 ...... a2n b2 ... ...

  4. 高斯消元(二)——竞赛题目中异或和的高斯消元

    然而算法竞赛并不会考到简单的加减消元,它回很隐晦的让你明白,高斯消元还有另外一种用途,那就是解异或方程组. 异或,C++中符号为'^'或关键字"xor",它的逆运算为它本身,可以看 ...

  5. 【Luogu 3389】【模板】高斯消元法(用高斯消元求解线性方程组)

    1.线性方程组 2.高斯消元法 步骤1:通过一系列的加减消元,得到类似 kx=b 的式子,求得最后一个未知量的结果 步骤2:然后逐一回代求解整个 x 向量 以下列方程为例: 第一次加减消元,用第1式子 ...

  6. 解线性方程组——高斯消元の板子

    ATP记得它在很久以前看过一点点高斯消元的东西然后做过一点点题目..但是当时实在是太zz了所以本来就没有很懂这个东西现在更是忘得差不多了.. 所以现在就当重新学一遍了QwQ 一点口胡的解释 高斯消元. ...

  7. [学习笔记]高斯消元求解两种特殊问题(带状矩阵/主元法)

    本文章是[学习笔记]概率与期望进阶的一部分 由于时间问题我写的比较简略,所以我把大佬的总结链接贴上来了(应该没什么吧qwq). 1 概述 最常见的当然是随机游走问题了- • fu=∑pu,v∗(fv+ ...

  8. 高斯消元(个人笔记)

    [高斯消元] 1.高斯消元主要用于求解线性方程组,也可以用来求矩阵的秩,矩阵的逆等等: 2.时间复杂度O(n^3) 一.通过题目,找出线性方程组,列出增广矩阵 二.Guass函数 1.第一步,找出当前 ...

  9. 高斯消元与行列式求值 part1

    两道模板题,思路与算法却是相当经典. 先说最开始做的行列式求值,题目大致为给一个10*10的行列式,求其值 具体思路(一开始看到题我的思路): 1.暴算,把每种可能组合试一遍,求逆序数,做相应加减运算 ...

  10. 【4.7 高斯消元详解】

    更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验 目录 4.7 高斯消元 4.7.1 高斯消元解线性方程组 4.7.2 高斯消元解异或线性方程组 4.7 高斯消元 概念 利用初 ...

最新文章

  1. NodeJS学习笔记—1.CommonJS规范
  2. 美国顶尖大学的博士是怎样练成的?
  3. 笔记本电脑控制面板在哪_2020年滚筒洗衣机选购指南:滚筒洗衣机应该怎么选?哪一些滚筒洗衣机性价比更高?...
  4. matlab 中pid tuning,PID Tuning Algorithm
  5. 北京图王软件开发有限公司产品介绍
  6. zend studio html乱码,解决Eclipse/Zend Studio编辑xml/html乱码问题
  7. cadvisor 离线安装
  8. 利用matlab来求极限
  9. 安卓系统添加字体库和修改系统默认的字体
  10. 图解pix2pix(PatchGAN) ,pix2pixHD,vid2vid,SPADE
  11. 迅雷极速版下载被迅雷屏蔽资源
  12. wsl2使用vscode无法写入文件permission denied解决方法
  13. 设置vscode默认终端为msys/MinGW32/MinGW64
  14. 百度网盘PC端扫描二维码登录时无法加载二维码问题解决方法
  15. SpringBoot 事务管理
  16. 【python学习】matplotlib图例分开显示
  17. 对 Error-State Kalman Filter 的理解
  18. 一般方程与参数方程求直线交点
  19. java获取系统时间的几种方法_Java篇—获取当前系统时间的三种方式(超详细+多方法)...
  20. 杭州复杂美科技有限公司专利“平均实力指数”全球排名

热门文章

  1. 反向传播算法公式推导,神经网络的推导
  2. 《匆匆那年》的你,还记得吗?数学中的那些有(hui)趣(se)的定理(11)——XXX定理
  3. 项目经理在汇报中的三个重点
  4. 奇妙的数学:蓝眼睛岛和强弱共识
  5. 反斜杆e,Linux下五彩斑斓的命令行输出
  6. 信息数据管理思维导图(Xmind)
  7. 基于jsp的KTV管理系统mysql
  8. 在线观看视频--使用代码倍速播放
  9. 小型机和PC服务器差异分析
  10. 基于模型的新能源汽车整车热管理系统设计方案