Codeforces Beta Round 2 B. The least round way(线性DP/数论)

题目:

There is a square matrix n × n, consisting of non-negative integer numbers. You should find such a way on it that

  • starts in the upper left cell of the matrix;
  • each following cell is to the right or down from the current cell;
  • the way ends in the bottom right cell.

Moreover, if we multiply together all the numbers along the way, the result should be the least "round". In other words, it should end in the least possible number of zeros.

Input

The first line contains an integer number n (2 ≤ n ≤ 1000), n is the size of the matrix. Then follow n lines containing the matrix elements (non-negative integer numbers not exceeding 109).

Output

In the first line print the least number of trailing zeros. In the second line print the correspondent way itself.

样例:

Input:

3
1 2 3
4 5 6
7 8 9

Output:

0
DDRR

翻译:

给定一个 n × 方阵,组成这个方阵的数字均为非负整数。试着找到这样一条满足以下三个条件的路径:

  1. 从最左上的单元格开始走;
  2. 只能向下或者向右边的单元格移动;(cell n.单元格)
  3. 走到最右下角的单元格停止。

使得该路径上的所有数字的乘积的“后缀0”最少。(eg:273800 的后缀0个数为 2)

思路:

首先我们充分发扬人类智慧(看题解),发现:一个数字的后缀0的个数,等于其因数中2, 5个数的最小值。

所以我们直接两遍线性DP,思路类似于数字三角形。

设状态 f[i][j] 表示走到 (i, j) 这个点时,所有路径中乘积的后缀0最少的个数是多少。

而这个问题,又可以转化为 走到 (i, j) 这个点时,所有路径中因数2或5最少的个数是多少个。

则状态转移方程可以记为:

f[i][j] = min(f[i-1][j], f[i][j-1]) + cnt_2[i][j]

cnt_2表示的是 (i, j) 这个数字中因数2的个数。

同理可对5进行求解,之后取min。

但这里有一个特殊的地方,即如果最后的答案 >1,而矩阵中存在数字0,不难发现,当路径经过0的时候,最后的答案为1,显然更优。但这种情况我们在上面没有考虑到,最后输出的时候特判一下即可。

另外本题还有求解路径,记录一下,倒退一边即可。

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;const int N = 1010;int n, ans;
int f[N][N], mx[N][N], pa[N][N], pb[N][N];
int a[N][N], b[N][N];bool flag;
int x0;int get_cnt(int n, int num)
{if (n == 0) return 0;int cnt = 0;while (n % num == 0){n /= num;cnt++;}return cnt;
}int main()
{cin >> n;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){cin >> mx[i][j];if (!mx[i][j]) flag = 1, x0 = i;a[i][j] = get_cnt(mx[i][j], 2), b[i][j] = get_cnt(mx[i][j], 5);}for (int i = 1; i <= n; i++){f[1][i] = f[1][i - 1] + a[1][i], pa[1][i] = 'R';f[i][1] = f[i - 1][1] + a[i][1], pa[i][1] = 'D';}for (int i = 2; i <= n; i++)for (int j = 2; j <= n; j++){pa[i][j] = (f[i - 1][j] > f[i][j - 1] ? 'R' : 'D');f[i][j] = min(f[i][j - 1], f[i - 1][j]) + a[i][j];}ans = f[n][n];for (int i = 1; i <= n; i++){f[1][i] = f[1][i - 1] + b[1][i], pb[1][i] = 'R';f[i][1] = f[i - 1][1] + b[i][1], pb[i][1] = 'D';}for (int i = 2; i <= n; i++)for (int j = 2; j <= n; j++){pb[i][j] = (f[i - 1][j] > f[i][j - 1] ? 'R' : 'D');f[i][j] = min(f[i][j - 1], f[i - 1][j]) + b[i][j];}if (flag && min(ans, f[n][n]) > 1){cout << 1 << endl;for (int i = 1; i < x0; i++) cout << 'D';for (int i = 1; i < n; i++) cout << 'R';for (int i = x0; i < n; i++) cout << 'D';}else if (ans <= f[n][n]){cout << ans << endl;int x = n, y = n;string res;for (int i = 0; i < 2 * n - 2; i++){res += pa[x][y];if (pa[x][y] == 'R') y--;else x--;}reverse(res.begin(), res.end());cout << res << endl;}else{cout << f[n][n] << endl;int x = n, y = n;string res;for (int i = 0; i < 2 * n - 2; i++){res += pb[x][y];if (pb[x][y] == 'R') y--;else x--;}reverse(res.begin(), res.end());cout << res << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/150592.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Facebook对现代社交互动的影响

自2004年成立以来&#xff0c;Facebook已经成为全球最大的社交媒体平台之一&#xff0c;改变了人们的交流方式和社交互动模式。作为一个数字平台&#xff0c;Facebook不仅为用户提供了分享生活点滴的空间&#xff0c;也深刻影响了现代社交互动的各个方面。本文将探讨Facebook如…

Lesson6 Python基础语法_5

列表和元组的概念 列表、元组&#xff1a;程序员在代码中批量表示数据的方式列表和元组的大部分功能都是相同的&#xff0c;但是有一个明显的差别&#xff1a;列表可以修改&#xff0c;但是元组不能修改列表相当于散装辣条&#xff0c;元组相当于袋装辣条 列表的创建和下标访问…

网络安全-jsp绕过

一、思路(这里给出jsp的WebShell样本) 1.1 加载字节码getshell <% page import"com.sun.org.apache.bcel.internal.util.ClassLoader" %> <html> <body> <h2>BCEL字节码的JSP Webshell</h2> <%String bcelCode "$$BCEL$$$l…

Java | Leetcode Java题解之第434题字符串中的单词数

题目&#xff1a; 题解&#xff1a; class Solution {public int countSegments(String s) {int segmentCount 0;for (int i 0; i < s.length(); i) {if ((i 0 || s.charAt(i - 1) ) && s.charAt(i) ! ) {segmentCount;}}return segmentCount;} }

loadrunner个人笔记

创建场景配置&#xff1a; 两个同时 去四&#xff1a;日志、时间、模拟、其他自动事务 加一&#xff1a;首选项 1、写脚本&#xff0c;沟通官方、文件打印扫描 MFI-sw.support.gsd.imsc.sda.globalopentext.com support.casemicrofocus.com 支持资源 | Micro Focus | OpenT…

Vue3:shallowRef与shallowReactive

目录 一.shallowRef 和 shallowReactive 1.shallowRef 2.shallowReactive 二.ref 和 reactive 1. ref 2. reactive 三.各自使用场景 1.shallowRef 2.shallowReactive 3.ref 4.reactive 四.shallowRef 使用 五.shallowReactive使用 六.效果 一.shallowRef 和 shal…

多维时序 | GWO-VMD-SSA-LSTM灰狼优化变分模态分解联合麻雀优化长短期记忆网络多变量时间序列光伏功率预测(Matlab)

多维时序 | GWO-VMD-SSA-LSTM灰狼优化变分模态分解联合麻雀优化长短期记忆网络多变量时间序列光伏功率预测 目录 多维时序 | GWO-VMD-SSA-LSTM灰狼优化变分模态分解联合麻雀优化长短期记忆网络多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 …

数据结构 ——— 数组 nums 包含了从 0 到 n 的所有整数,但是其中缺失了一个,请编写代码找出缺失的整数,并且在O(N)时间内完成

目录 题目要求 代码实现 方法1&#xff08;异或法&#xff09;&#xff1a; 异或算法的时间复杂度&#xff1a; 方法2&#xff08;等差数列公式&#xff09;&#xff1a; 等差数列公式的时间复杂度&#xff1a; 题目要求 整型数组 nums 包含了从 0 到 n 的所有整数&…

C#测试调用FreeSpire.PDFViewer浏览PDF文件

Free Spire.PDFViewer是商业版Spire.PDFViewer的社区版本&#xff0c;支持以控件形式打开并查看PDf文件&#xff0c;但由于是免费版本&#xff0c;存在使用限制&#xff0c;打开的PDF文档只显示前10页内容。如果日常操作的pdf文件都不超过10页&#xff0c;可以考虑使用Free Spi…

【车联网安全】车端网络攻击及检测的框架/模型

参考标准&#xff1a; 《汽车数据安全管理若干规定&#xff08;试行&#xff09;》ISO/SAE 21434《道路车辆 网络安全工程》威胁分析和风险评估&#xff08;TARA&#xff09;ISO/DIS 24089R155法规的国标转换&#xff1a;《汽车整车信息安全技术要求》&#xff08;UN R155&…

①无需编程 独立通道 Modbus主站EtherNet/IP转ModbusRTU/ASCII工业EIP网关串口服务器

Modbus主站EtherNet/IP转ModbusRTU/ASCII工业EIP网关串口服务器https://item.taobao.com/item.htm?ftt&id743840591638 EtherNet/IP 串口网关 EtherNet/IP 转 RS485 型号 2路总线EIP网关 MS-A1-2021 4路总线EIP网关 MS-A1-2041 4路总线EIP网关&#xff08;双网口&am…

solidwork中查看装配体螺丝或零件

假设我的PETG打印件到了&#xff0c;想知道这个螺丝的型号&#xff0c;怎么办 解决办法&#xff1a; 第一步先看看有没有固定的字样 如果固定的话是不行的。需要这样做&#xff1a; 把这里给关了 接下来第二步&#xff0c;点击你想查看的螺丝 然后就会跳到零件图 可以看到直径…

【会议征稿通知】第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024)

第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024) 2024 3rd International Conference on Image Processing, Computer Vision and Machine Learning 重要信息 大会官网&#xff1a;2024 3rd International Conference on Image Processing, Computer Vision…

逆向推理+ChatGPT,让论文更具说服力

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 使用ChatGPT辅助“逆向推理”技巧&#xff0c;可以显著提升论文的质量和说服力。逆向推理从结论出发&#xff0c;倒推所需的证据和论点&#xff0c;确保整个论证过程逻辑严密且无漏洞。…

每日论文2——用于锁相环应用的0.025%直流电流失配电荷泵

《A 0.025% DC Current Mismatch Charge Pump for PLL Applications 》2021 IEEE International Midwest Symposium on Circuits and Systems (MWSCAS) The Key Lab of micro-nano electronics and system integration of Xian city, Xian 本文结构主要不同是仅用了一个OPA&…

【Linux-基础IO】文件描述符重定向原理缓冲区

文件描述符 文件描述符的概念和原理 通过上述内容&#xff0c;我们知道使用 open 系统调用打开文件时&#xff0c;系统会返回一个文件描述符。这个描述符用于后续的文件操作。 在C语言中默认会打开三个输入输出流&#xff0c;分别是stdin&#xff0c;stdout&#xff0c;stde…

算法工程师重生之第十四天(找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树 )

参考文献 代码随想录 一、找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示: 二叉树的节…

打靶记录18——narak

靶机: https://download.vulnhub.com/ha/narak.ova 推荐使用 VM Ware 打开靶机 难度&#xff1a;中 目标&#xff1a;取得 root 权限 2 Flag 攻击方法&#xff1a; 主机发现端口扫描信息收集密码字典定制爆破密码Webdav 漏洞PUT 方法上传BF 语言解码MOTD 注入CVE-2021-3…

9月24日笔记

内网信息收集 本机基础信息收集 当通过web渗透或者其他方式活动服务器主机权限之后&#xff0c;需要以该主机作为跳板&#xff0c;对内网环境进行渗透&#xff0c;对于攻陷的第一台主机&#xff0c;其在内网中所处的网络位置、当前登录的用户、该用户有什么样的权限、其操作系…

Pinia从安装到使用

什么是Pinia 添加Pinia到vue项目 使用Pinia实现计数器案例 counter.js import {defineStore} from "pinia"; import {ref} from "vue";export const useCounterStore defineStore(coutner,()>{//定义数据&#xff08;state&#xff09;const count r…