小编roh*_*ngh的帖子

我将如何使用DP解决此问题?

问题链接:http : //codeforces.com/contest/2/problem/B

有一个由非负整数组成的方阵n?×?n。您应该在上面找到这样的方法

从矩阵的左上角单元格开始;接下来的每个单元格都位于当前单元格的右侧或下方;方式在右下角的单元格中结束。此外,如果我们将所有数字相乘,结果应该是最小的“舍入”。换句话说,它应以尽可能少的零结尾。

输入第一行包含一个整数n(2 ??? n ??? 1000),n是矩阵的大小。然后跟随n行包含矩阵元素(不超过10 ^ 9的非负整数)。

输出在第一行中,打印最少数量的尾随零。在第二行中打印相应的方式本身。

我想到了以下几点:最后,无论答案是什么,它都应包含2和5的最小幂。因此,我所做的是,对于输入矩阵中的每个条目,我都计算了2和5的幂,并将它们存储在单独的矩阵中。

    for (i = 0; i < n; i++)
    {
        for ( j = 0; j < n; j++)
        {
            cin>>foo;
            matrix[i][j] = foo;
            int n1 = calctwo(foo);   // calculates the number of 2's in factorisation of that number
            int n2 = calcfive(foo); // calculates number of 5's
            two[i][j] = n1;
            five[i][j] = n2;
        }
    }
Run Code Online (Sandbox Code Playgroud)

之后,我这样做了:

for (i = 0; i < n; i++)
{ …
Run Code Online (Sandbox Code Playgroud)

algorithm recursion matrix dynamic-programming

6
推荐指数
1
解决办法
692
查看次数