您的位置:首页 > Web前端

USACO3.2.4 Feed Ratios (ratios)

2015-01-30 17:42 405 查看
其实就是求一个最简配比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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: