jzoj 2541. 【NOIP2011模拟9.1】方格取数

发布于 2019-03-25  4 次阅读


题目描述

给定一个N*M的矩阵,记录左上角为(1,1),右下角为(N,M),现在从(1,1)开始取数,每次只能向下或向右移动一个单位,最终到达(N,M),我们把路径上所有的数相乘,记为C。使C的结果最大已经不能满足我们了,现在我们想让C末尾的零最少。
Ps.11000末尾有3个零,100000100末尾有2个零。

输入

输入文件matrix.in的第一行包含两个正整数N,M表示矩阵大小。
接下来N行每行M个正整数给出整个矩阵。

输出

输出文件名为matrix.out。包含一个整数表示所求最小值。

思路

因为只有在2*5(质数)的情况下才会出现末尾0,所以我们可以把每一个数中的2和5的数量分别找出,分别跑一边最短路(dp)然后输出较小的那个

var
  a,b,c:array[0..1000,0..1000] of longint;
  i,j,k,n,m,s,x,y:longint;
function min(x,y:longint):longint;
begin
  if x
]]>