1.26B補好思路

思路:定義temp這個數組對錶中可能出現的組合進行一一表示,例如temp[1][1][1]=a[1][1],而temp[1][1][n]=a[1][1]+a[1][2]+到a[1][n],temp[1][n][n]=a[n][1]+a[n][2]+到a[n][n],容易看出temp數組隨着k,i,j的不同,可以取各種組合。從而找到最大值。


#include<stdio.h>
#include<string.h>
int n,a[105][105],tmp[105][105][105]; //a[][]爲輸入,tmp[k][i][j]中保存第k列,從i行到j行的綜合。
void Set()    //初始化tmp
{
    memset(tmp,0,sizeof(tmp));
    int i,j,k;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            scanf("%d",&a[i][j]);
    for(k=1; k<=n; k++)
        for(i=1; i<=n; i++)
            for(j=i; j<=n; j++)
                for(int p=i; p<=j; p++)
                    tmp[k][i][j]+=a[p][k];
}
int main()
{
    while(~scanf("%d",&n))
    {
        Set();
        int sum,_max=0,i,j,k;//此題不存在每個數都爲負的情況。
        for(i=1; i<=n; i++)
            for(j=i; j<=n; j++)
            {
                sum=0;    //每計算一組從i行到j行的矩形都要給sum先清零。
                for(k=1; k<=n; k++) //同一維數組的尋找連續字串的和。
                {
                    sum+=tmp[k][i][j];
                    if(sum<0) sum=0;
                    if(sum>_max) _max=sum;
                }
            }
        printf("%d\n",_max);
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章