usc@1002:项目投标

来源:互联网 发布:网络安全技术与实践 编辑:程序博客网 时间:2024/05/01 14:55

题目:

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
14590 90 90 8590 85 90 9090 90 85 9090 90 90 9090 85 90 85
Sample Output
360345
我的代码:

#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两一维数组保存各个项目的最大、最小报价,最后用循环将整个的最大、最小报价算出即可。

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

0 0
原创粉丝点击