题目链接:hihocoder 1241

题意:

n*n的格阵,每个方格内有一个数字.蚂蚁从左上角走到右下角,数字是零的方格不能走,只能向右向下走.蚂蚁走的路径上全部方格的的乘积为s,要使s低位0的个数尽量少.问,最少s的末尾包含几个0.

分析:

10=2*5,所以只要统计蚂蚁路径上2的个数和5的个数,二者之中的较小者即为s末尾0的个数.

假设2的个数为x,5的个数为y.

对于路径(x,y),答案是min(x,y).

"路径(p,q)比路径(x,y)好"的充要条件"min(p,q)<min(x,y)".

最优路径(x,y)中x为最小值或者y为最小值.

这个问题可以进行延伸:将路径上数字的乘积用k进制来表示,使得末尾0的个数尽量少.对k进行因子分解,当k是若干个质数的乘积时,k=p1*p2*p3*p4...,对于每一个pi进行一次动归.当上边的主键等于左边时,就应该比较剩余的值,有点不好整了,还是两个质数之积比较简单.当k=p1^m1*p2^m2......时,又该怎么做呢?

代码:

 #include<iostream>
 #include<stdio.h>
 #include<algorithm>
 #include<queue>
 #include<math.h>
 #include<string.h>
 #include<stdlib.h>
 using namespace std;
 typedef long long ll;
 typedef unsigned long long ull;
 #define re(i,n) ;i<n;i++)
 int n;
 ;
 int a[maxn][maxn];
 int two[maxn][maxn], five[maxn][maxn];
 int s[maxn][maxn][];
 void go(int c[maxn][maxn], int x){
     for (int i = 1; i <= n; i++){
         for (int j = 1; j <= n; j++){
             if (a[i][j] == 0){
                 c[i][j] = 1e6; continue;
             }
             int cnt = ;
             ; k /= x)cnt++;
             c[i][j] = cnt;
         }
     }
 }
 void work(int c[maxn][maxn], int cc[maxn][maxn]){
     re(i, n + 1)s[0][i][0] = s[0][i][1] = s[i][0][0] = s[i][0][1] = 1e6;
     s[0][1][0] = s[0][1][1] = s[1][0][0] = s[1][0][1] = 0;
     for (int i = 1; i <= n; i++){
         for (int j = 1; j <= n; j++){
             if (s[i - 1][j][0] == s[i][j - 1][0]){
                 s[i][j][0] = c[i][j] + s[i][j - 1][0];
                 s[i][j][1] = cc[i][j]+min(s[i][j - 1][1], s[i - 1][j][1]);
             }
             ][j][]< s[i][j - ][]){
                 s[i][j][0] = s[i - 1][j][0] + c[i][j];
                 s[i][j][1] = s[i - 1][j][1] + cc[i][j];
             }
             else{
                 s[i][j][0] = s[i][j-1][0] + c[i][j];
                 s[i][j][1] = s[i][j-1][1] + cc[i][j];
             }
         }
     }
 }
 int main(){
     freopen("in.txt", "r", stdin);
     cin >> n;
     re(i, n)re(j, n)scanf("%d", &a[i + 1][j + 1]);
     go(two, 2), go(five, 5);
     work(two, five); int p = min(s[n][n][0], s[n][n][1]);
     work(five, two); int q = min(s[n][n][0], s[n][n][1]);
     cout << min(p, q) << endl;
     return 0;
 }

hihocoder1241 Best Route in a Grid的更多相关文章

  1. hihocoder 1241:Best Route in a Grid

    #1241 : Best Route in a Grid 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个N行N列的非负整数方阵,从左上角(1,1)出发,只能向下 ...

  2. #1241 : Best Route in a Grid

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个N行N列的非负整数方阵,从左上角(1,1)出发,只能向下或向右走,且不能到达值为0的方格,求出一条到达右下角的最佳 ...

  3. 广大暑假训练1(poj 2488) A Knight's Journey 解题报告

    题目链接:http://vjudge.net/contest/view.action?cid=51369#problem/A   (A - Children of the Candy Corn) ht ...

  4. [4]Telerik Grid 简单使用方法

    1.columns <% Html.Telerik().Grid(Model) .Name("Orders") .Columns(columns => { //绑定列名 ...

  5. Oracle Grid control 11g及Active DataGuard 11g安装部署

    Oracle Grid control 11g及Active DataGuard 11g安装部署(一) 原贴 http://blog.csdn.net/lichangzai/article/detai ...

  6. MatterTrack Route Of Network Traffic :: Matter

    Python 1.1 基础 while语句 字符串边缘填充 列出文件夹中的指定文件类型 All Combinations For A List Of Objects Apply Operations ...

  7. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  8. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  9. Application Request Route实现IIS Server Farms集群负载详解

    序言 随着公司业务的发展,后台业务就变的越来越多,然而服务器的故障又像月经一样,时不时的汹涌而至,让我们防不胜防.那么后台的高可用,以及服务器的处理能力就要做一个横向扩展的方案,以使后台业务持续的稳定 ...

随机推荐

  1. Linux文件和目录

    access() //检查是否调用进程有Access这个文件的权限,如果文件是一个符号链接,会将它解引用,成功返回0,失败返回-1设errno #include <unistd.h> in ...

  2. Jmeter默认报告优化

    一.本文目的: 之前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,但是最后生成的报告有一点小问题,虽然不影响使 ...

  3. Mysql数据库上修改日期-->造数据

    这次要给客户安装测试ineedle设备,但是安装后不会立刻有数据显示,不能够全面的展示给用户web界面的一些信息.此时需要有一个公网服务器能够展示一下ineedle统计数据,但是公司58设备上没有流量 ...

  4. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  5. Neutron分析(5)—— neutron-l3-agent中的iptables

    一.iptables简介 1.iptables数据包处理流程 以本机为目的的包,由上至下,走左边的路 本机产生的包,从local process开始走左边的路 本机转发的包,由上至下走右边的路 简化流 ...

  6. 查找代码错误.java

    class Other{ public int i; } class Something{ public static oivd main(String[]args){ Other o = new O ...

  7. AC日记——判断字符串是否为回文 openjudge 1.7 33

    33:判断字符串是否为回文 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个字符串,输出该字符串是否回文.回文是指顺读和倒读都一样的字符串. 输入 输入为一行字符串(字符串中 ...

  8. reflect2015破解

    具体看 http://download.congci.com/download/net-reflector-7-6-1-824-wanquan-pojie#downloads *博主注:因为很多破解程 ...

  9. [No00000A]计算机的存储单位

    位 bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位. 字节 byte:8个二进制[bit (比特)(Binary Digits)]位为一个字节(B), ...

  10. SQL Server的各种聚合函数

    聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体有哪些聚合函数呢?我们来一一看一下: 1. AVG 返回指定组中的平 ...