USACO3.2.4 Feed Ratios (ratios)

本文介绍了一种算法,用于求解饲料配比问题,通过枚举法找到最简配比,确保不同饲料的比例满足特定条件。该算法适用于农业、食品科学等领域,旨在优化资源分配。
其实就是求一个最简配比a,b,c,t使a(x1,y1,z1)+b(x2,y2,z2)+c(x3,y3,z3)=t(k1,k2,k3)
枚举lam表示目标饲料的份数
枚举第一种饲料的份数 i 和第二种饲料的份数 j ,计算k,比较

注意:各种边界条件



/*
ID:xsy97051
LANG:C++
TASK:ratios
*/
#include <cstdio>
#include <iostream>
using namespace std;
int d[4][3];
 
int main()
{
	freopen("ratios.in", "r", stdin);
	freopen("ratios.out", "w", stdout);
	for(int i=0;i<4;++i)
		for(int j=0;j<3;++j)
			cin>>d[i][j];
			
	int p;
	for(p=0;p<3;++p)
		if(d[3][p]) break;
	
	for(int lam=1;lam<=100;++lam)
		for(int i=0; i<=100 && d[1][0]*i<=d[0][0]*lam && d[1][1]*i<=d[0][1]*lam && d[1][2]*i<=d[0][2]*lam; ++i)
			for(int j=0; j<=100 && d[1][0]*i+d[2][0]*j<=d[0][0]*lam && d[1][1]*i+d[2][1]*j<=d[0][1]*lam && d[1][2]*i+d[2][2]*j<=d[0][2]*lam; ++j)
			{
				int k=(d[0][p]*lam - d[1][p]*i - d[2][p]*j) / d[3][p], kk;
				for(kk=0;kk<3;++kk)
				{
					if(d[1][kk]*i + d[2][kk]*j + d[3][kk]*k != d[0][kk]*lam)
						break;
				}
				if(kk==3)
				{
					cout<<i<<" "<<j<<" "<<k<<" "<<lam<<endl;
					return 0;
				}
			}
	cout<<"NONE"<<endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值