2245. 转角路径的乘积中最多能有几个尾随零(dp)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2245. 转角路径的乘积中最多能有几个尾随零(dp)相关的知识,希望对你有一定的参考价值。

2245. 转角路径的乘积中最多能有几个尾随零(dp)

考虑贪心,要求0的个数尽可能地多,显然起点和终点都是在边界。

显然0的个数就是因子个数: min ⁡ c n t 2 , c n t 5 \\min\\cnt_2,cnt_5\\ mincnt2,cnt5

考虑枚举每个拐点,就要4种情况:左上、右上、左下、右下。

时间复杂度: O ( n m ) O(nm) O(nm)

class Solution 
public:
    int maxTrailingZeros(vector<vector<int>>& g) 
        int n = g.size(),m =g[0].size();
        vector<vector< vector<int> > >f(4,vector<vector<int> >(n+1,vector<int>(m+1)));
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                int x = g[i-1][j-1];
                int c2=0,c5=0;
                while(x%5==0) x/=5,c5++;
                while(x%2==0) x/=2,c2++;
                f[0][i][j] = f[0][i][j-1] + c2;
             //   if(i==1) printf("%d---\\n",c2);
                f[1][i][j] = f[1][i-1][j] + c2;
                f[2][i][j] = f[2][i][j-1] + c5;
                f[3][i][j] = f[3][i-1][j] + c5;
            
        
       // printf("m=%d %d %d\\n",m,f[0][1][m],f[0][1][0]);
        int ans = 0;
         for(int i=1;i<=n;i++)
             for(int j=1;j<=m;j++)
                 int tmp = 1e9;
                 for(int k=0;k<3;k+=2)
                     tmp = min(tmp,f[k][i][j]+f[k+1][i-1][j]);
                 
                 ans=max(ans,tmp);
                 tmp = 1e9;
                 for(int k=0;k<3;k+=2)
                     tmp = min(tmp,f[k][i][j]+f[k+1][n][j]-f[k+1][i][j]);
                     
                 ans=max(ans,tmp);    
                 tmp = 1e9;
                 for(int k=0;k<3;k+=2)
                     tmp = min(tmp,f[k][i][m]-f[k][i][j]+f[k+1][i][j]);
                     
                 ans=max(ans,tmp); 
                 tmp = 1e9; 
                 for(int k=0;k<3;k+=2)
                     tmp = min(tmp,f[k][i][m]-f[k][i][j]+f[k+1][n][j]-f[k+1][i-1][j]);
                     
                 ans=max(ans,tmp);
            
               
         
        return ans;
    
;

以上是关于2245. 转角路径的乘积中最多能有几个尾随零(dp)的主要内容,如果未能解决你的问题,请参考以下文章

如何删除字符串中的前导零和尾随零? Python

面试题 16.05. 阶乘尾数

三维方形坐标空间内转角对应的单位向量

数字字段项的格式掩码:尾随和“前导”零

POJ 2245 Addition Chains(算竞进阶习题)

求N的阶乘末尾有几个0