usc@1002:项目投标

该博客介绍了usc@1002的项目投标问题,涉及n个独立子项目和m个投标公司的场景。每个公司对每个子项目都有报价,目标是找出完成所有项目的最高和最低总报价。博主提供了解题思路,包括原始方法和优化后的解决方案,优化点在于使用一维数组记录每个项目的最大和最小报价,从而降低程序的空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

Description

某项目可以分为n个不同的子项目,每个子项目都是独立的。现在有m个公司来投标这些子项目,每个公司对这n个子项目都给出了报价。一个公司可以承担若干个项目,一个项目不能由2个或2个以上的公司共同完成。请你给出完成整个项目的最高和最低报价。

Input

输入的第一个整数T表示有多少组测试数据(1≤T≤10)。每组测试数据的第一行是整数n(1≤n≤1000),表示有项目可以分n个子项目;第二行是整数m(1≤m≤1000),表示有m个公司来投标。然后是m行n列的正整数,第i行第j列的正整数k(1≤k≤100),表示第i家公司对第j个子项目的报价。

Output

为每组测试数据输出两行,第一行是整个项目的最高报价,第二行是整个项目的最低报价.

Sample Input
1
4
5
90 90 90 85
90 85 90 90
90 90 85 90
90 90 90 90
90 85 90 85
Sample Output
360
345
我的代码:

#include <stdio.h>
 
int a[1111][1111]={0};
 
int main()
{
    int t;
    scanf("%d",&t);
    for(int k=0;k<t;k++)
    {
        intn,m;
        scanf("%d%d",&n,&m);
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        int max=0,min=0;
        for(int i=0;i<n;i++)
        {
            int _max=a[0][i];
            int _min=a[0][i];
            for(int j=1;j<m;j++)
            {
                _max=_max>a[j][i]?_max:a[j][i];
                _min=_min<a[j][i]?_min:a[j][i];
            }
            max+=_max;
            min+=_min;
        }
        printf("%d\n%d\n",max,min);
    }
    return 0;
}

解题思路:

将数据读入二维矩阵后,用循环将每列(即每个项目)的最大值_max、最小值_min找出,然后加到max、min上,然后输出max、min。


优化解法【转】:

#include <stdio.h>
int main()
{
    int a[1002],b[1002];
    int str,i,j,m,n,T,max,min;
    scanf("%d",&T);
    while(T--)
    {
        max=0;min=0;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            b[i]=a[i];
        }
        for(j=1;j<m;j++)
        {
            for(i=1;i<=n;i++)
            {
                scanf("%d",&str);
                if(str>=a[i]) a[i]=str;
                if(str<=b[i]) b[i]=str;
            }
        }
        for(i=1;i<=n;i++)
        {
            max+=a[i];
            min+=b[i];
        }
        printf("%d\n%d\n",max,min);
    }
    return 0;
}


优化点:

分别用a、b两一维数组保存各个项目的最大、最小报价,最后用循环将整个的最大、最小报价算出即可。

减小了程序的空间复杂度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值