QWQ的朋友QAQ开了一个A工厂,但QAQ不是一个很精明的老板,A工厂只生产三种产品,需要三种原材料,第一种产品分别消耗第一种原材料a1、第二种原材料b1、第三种原材料c1,第二种产品分别是a2、b2、c2,第三种产品分别是a3、b3、c3,但原材料总量是有限制的,分别是a、b、c,第一种产品可以盈利d1元,第二种产品可以盈利d2元,第三种原材料可以盈利d3元,由于每个产品都不可以分解,所以所有产品的生产量一定是整数。QAQ不知道怎么合理安排生产让他的盈利最大,于是他求助QWQ,QWQ更不知道了,但你一定知道 先输入一个数字t(t<20),代表数组的组数 每组数据包括五行 第一行三个数字a1、b1、c1 第二行三个数字a2、b2、c2 第三行三个数字a3、b3、c3 第四行三个数字a、b、c 第五行三个数字d1、d2、d3 保证所有输入都是非负整数,并且不大于200 输出最大盈利 测试用例 1 1 1 1 1 1 1 1 1 1 3 3 3 1 2 3 9 代码如下 #include <iostream> #include <bits/stdc++.h> using namespace std; int main() {int a[10],b[10],c[10],d[4],i,j,n,t,m,max,x,y,k; cin>>x; for(y=0;y<x;y++) { max=0; for(i=1;i<=4;i++) cin>>a[i]>>b[i]>>c[i]; cin>>d[1]>>d[2]>>d[3]; for(i=0;i<=200;i++) { for(j=0;j<=200;j++) {for(k=0;k<=200;k++) { if(i*a[1]+j*a[2]+k*a[3]<=a[4]&&i*b[1]+j*b[2]+k*b[3]<=b[4]&&i*c[1]+j*c[2]+k*c[3]<=c[4]) { t=i*d[1]+j*d[2]+k*d[3]; if(t>max) max=t; } } } } cout<<max<<endl; } return 0; }
#用i,j,k表示第一,二,三组多少个,然后每种情况挨个枚举,可以用于解方程这种情况,解得个数是有限的,然后限制条件就是原料。每个组数当做循环条件,原料当做限制条件,可以实现暴力枚举法