代码无法找到最大总和

标签 c

Link to CodeChef problem MAXSC

尝试的解决方案:

#include<stdio.h>

int main()
{
    long long int n, t, k, i, j, max[701], a[701][701], sum, flag;

    scanf( "%lld", &t );

    for( k = 0 ; k < t ; k++ )
    { 
        scanf( "%lld", &n );

        for( i = 1 ; i <= n ; i++ )
        {  
            for( j = 1 ; j <= n ; j++ )
            { 
                scanf( "%lld", &a[i][j] );
                if( j == 1)
                    max[i] = a[i][1];
                if( a[i][j] > max[i] )
                    max[i] = a[i][j];
            }
        }

        sum = 0, flag = 0;

        for( i = 1 ; i <= n-1 ; i++ )
        { 
            if( max[i] &lt; max[i+1])
                sum = sum + max[i];
            else
            {
                flag = 1;
                break;
            }
        }

        if(flag == 1)
            printf("-1\n");
        else
        {
            sum = sum + max[n-1];
            printf("%lld\n", sum );
        }
    }
}

计算 E1 + E2 + ... + EN 的最大可能值。如果无法选取元素 E1、E2、...、EN,则打印 -1。

约束:
代码应该选择 N 个元素,每个序列一个;让我们用 Ei 表示从序列 Ai 中选取的元素。对于每个 i (2 ≤ i ≤ N),Ei 应严格大于 Ei-1

这个约束是否意味着我们必须从每行中选择最大元素?

如果你看一下给出的例子:

输入示例:

1
3
1 2 3
4 5 6
7 8 9

输出:

18

说明

示例情况 1:为了最大化分数,请从第一行中选择 3 个,从第二行中选择 6 个,从第三行中选择 9 个。所得总和为 E1+E2+E3 = 3+6+9 = 18。

如果您注意到他们提到了“最大化”。

虽然我的代码找到了最大值,但它没有被接受。

最佳答案

why is this code not being accepted?

代码的逻辑有缺陷。当max[i] < max[i+1]为 false,则设置 flag = 1;而不是考虑 a[i] 中的其他元素.

Does this constraint mean we have to choose max element from each line?

没有。目标是最大总和,而不是最大值之和。

// if( max[i] &lt; max[i+1])
if(max[i] < max[i+1])
  sum = sum + max[i];
else {
  flag = 1;
  break;
}

解决方案在于绑定(bind)其他元素。即使失败了,也许之前的选择也应该改变。可以采用递归或其他分析。我认为首先对每行数据进行排序以避免此代码占用 n*n 是有意义的运行。编写 n*n 应该很简单解决方案(尝试每种组合)。

由于这是家庭作业,请让 OP 来开发解决方案。

关于代码无法找到最大总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155453/

相关文章:

c - 获取对 'clock_gettime' 错误的 undefined reference ,用于 curl 程序

c - 使用 Structs 来保存我在 C 游戏中的所有变量?

c++ - 如何从远程线程 DestroyWindow?

C 结构和指针

c - SDL C 鼠标/键盘输出

c++ - 您是否将模块特定的功能声明为静态的?

c - MQOPEN 给出错误 2085,这是我以前没有的

c - 使用 UART 从 PC 读取一个 txt 文件 - Atmega32A

Graph的C结构,有助于理解结构

c - 如何使用宏扩展作为编译指示的第一个标识符?