Codevs 1260 快餐问题

题目描述 Description
Peter最近在R市开了一家快餐店,为了招揽顾客,该快餐店准备推出一种套餐,该套餐由A个汉堡,B个薯条和C个饮料组成。价格便宜。为了提高产量,Peter从著名的麦当劳公司引进了N条生产线。所有的生产线都可以生产汉堡、薯条和饮料,由于每条生产线每天所能提供的生产时间是有限的、不同的,而汉堡、薯条和饮料的单位生产时间又不同,这使得Peter很为难,不知道如何安排生产才能使一天中生产的套餐产量最大。请你编写程序,计算一天中套餐的最大生产量。为简单起见,假设汉堡、薯条和饮料的日产量不超过100个。

输入描述 Input Description
第一行为三个不超过100的正整数A、B、C,中间以一个空格分开;

第二行为三个不超过100的正整数p1、p2、p3分别为汉堡、薯条和饮料的单位生产耗时。中间以一个空格分开。

第三行为一个整数N(0≤N≤10)代表流水线;

第四行为M个不超过10000的正整数,分别为各条生产流水线每天提供的生产时间,中间以一个空格分开。

输出描述 Output Description
输出文件仅一行,即每天套餐的最大产量。

样例输入 Sample Input
1 2 1
1 2 1
5
16 16 8 9 14

样例输出 Sample Output
10

刚开始想复杂了。。。原来这题并不难。。

#include
#include
#include
#include
using namespace std;
const int maxn = 111;
int A,B,C,p1,p2,p3,n,t[maxn],ans;
int f[11][maxn][maxn][maxn];
//f[i][a][b][c] :  前i条流水线, 生产a个汉堡,b个薯条,c个饮料的最大套餐产量
int main()
{
    scanf("%d%d%d",&A,&B,&C);
    scanf("%d%d%d",&p1,&p2,&p3);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&t[i]);
        t[i]+=t[i-1];
    }
    for(int i=1;i<=n;i++)
        for(int a=A;a*p1<=t[i]&&a<=100;a++)
            for(int b=B;a*p1+b*p2<=t[i]&&b<=100;b++)
                for(int c=C;a*p1+b*p2+c*p3<=t[i]&&c<=100;c++)
ans=max(ans,f[i][a][b][c]=max(f[i][a-A][b-B][c-C]+1,max(f[i-1][a-A][b-B][c-C]+1,f[i][a][b][c])));

    cout<
}

你可能感兴趣的:(codevs题目)