CSU-2034 Column Addition

Description

A multi-digit column addition is a formula on adding two integers written like this:

aaarticlea/webp;base64,UklGRg4FAABXRUJQVlA4TAIFAAAvm4EcAB6q2rYtkpxP7snUOdQR1BGULt22bbmSpUq2GtWqVJih1NAy74aT5d0SJQa+gaZw/WHmxE/cF5TLGGZmsMz4hBMHRdv/ts0P9jL/O+gE/xMYC4eamhkKCQoZGQV17yGU1b333m2GQMZPirVtbaY9cjbDHlgBK4hGx8bGIVFIVFRU1PReUK/BTP97L5ivvGLK039HbiQpUnoYbjOLqXmAkjf37Wb+3cy/Tek2dHbYNYDiKXtqROChO8XfwgRbtjr4xnoGgfQr5v/gCCpWsRDA5jPcjwJf7lO5Slc7y/PPSrYujcBMnPCpqIbAlS3iCiZYRTGfZB8C+w7KJ2nAR9RvDWsITBlJ66SzwjVcQUkRg/lk+85WBEW5Cjx8JP3mRUmOmxdNJF41ArctEldQUTpSsW16alCyiEGE+QPY1v+T74/Wzm9xjADEq9bW1goVnxqu9y1suPrjIDnlaRRgODQASKOze5wjw/1kK6oVZVLl6rjWPLz6HVakbIkpDpHFbgVw3ngR6bZtEeX3oAjle1kQhM9YnLKlRpR0BdtYdreyCmwalwUPfepDUoYotw1ZJsa3CxGOobXf2XH5Z9zA94Ez5omxNx4ibTkzM8u0UrxnEcQ2NZ2zzF7omDiKOxZfynCrbrtTrvdxs/+UL2VfcRhDl12MAk+FwSY2HdfcHWomycyKsIKn0lX/hm9MUxftk5otP8kXrb4wsE08FiBTgad8DzP7HJQtCPh64o4rxtEWu5WSNVsc7Zl5Y1BPBRXmo2yhGy5qfV9xebvt6UVJyO96gf2UFWn6/qL5F2q2pOWKojGo9p1PdQkDvgLln6bPt1Vj1TFB+d0r0cAykVbn3X2f6JPabfBs44VIr+/qB8zlqVd9sVHmP2s1ipWU3aF4T12cewGOK56o29J9N1wqg1HqN4u9KlfvzkXZAu/Oa6qSa8ezHZd/flIyWLlFhr+zPUR9ll+GUH1k/QsveIpAuhdeeCHMxuqE9HXc05Bo4cAvmand14ePVPVld1N2dUwq1ldSU6jPzuvXIpaff17cksChZY+H9+Xnn4tYJ75JPxO8/SyWlIWUhfGzEEPq0nlbml+OgYzVJXlqNmVfdmda4cndqUrtXinKFQP5b/iynLl18W8Rlwcakv/ddvmStozAVi3y1Kseon5/lwJNHNMxcYXTeOrdf+AuDxOsSJMAbftE+9ILXNUii/uTDfvmDFmb5oVnPxP4skVlCwMiCVkYLNFjTVRS2aIKT8VFb0ONqmTdFkdzZt64vNa+1yLKpjtVEmDtU321hvfizvv+PPFNbrLMyStHi+Z2rgriYuQmxyhfqkTcQ4+u4iYef5Y0YuZS6uKXiYvnba3IT4KI8Y0JJZQnxA306Cou7ifrsLbS9om3tbUeaDRxSN+JE+jRVTx29MDE+OVAYx6ZqRWrKBJTYBsvPivKhhPo7iqy4r1Ud4TiO3yr3+yojzy5+x6cQHdXEeAPUbNtlZSU3ZnKfL7CCXR3FQHSfdvEBez3SjSwC0U/2P+4g/++ee42mOCTWPwArE2zZdlxsT/vtodxAx1dxY4Mf8fvy0iAit+H5lNSTuedlAdcYaWrq6jfhKzlOp5GXbzPua+wOCU7r1acQI+uImT7bi5zX7MEnV5y/7EIiys8t627qwiPff8OkN95a5VRFCFyrf7Ke0V1FTelpxX73wF4sGjJ2v0/3ISPm/13s/8A" alt="img">

A multi-digit column addition is written on the blackboard, but the sum is not necessarily correct. We can erase any number of the columns so that the addition becomes correct. For example, in the following addition, we can obtain a correct addition by erasing the second and the forth columns.

Your task is to find the minimum number of columns needed to be erased such that the remaining formula becomes a correct addition.

Input

There are multiple test cases in the input. Each test case starts with a line containing the single integer n, the number of digit columns in the addition (1 ⩽ n ⩽ 1000). Each of the next 3 lines contain a string of n digits. The number on the third line is presenting the (not necessarily correct) sum of the numbers in the first and the second line. The input terminates with a line containing “0” which should not be processed.

Output

For each test case, print a single line containing the minimum number of columns needed to be erased.

Sample Input

3
123
456
579
5
12127
45618
51825
2
24
32
32
5
12299
12299
25598
0

Sample Output

0
2
2
1

题意

给定一个n,给出三个n位数,你可以同时去掉这三个数中的同一位数,使第一个数加第二个数等于第三个数,问最小需要去掉几位。

题解

这是一个DP题,贪心的去是不对的,随便举个例子即可证明贪心错误。

设\(dp[i]\)为到第i位最多可以保留多少位,用一个变量ans1存储最大能保留多少位。设a[i]为第一串数字的第i个数,b[i]为第二串数字的第i个数,ans[i]为第三串数字的第i个数,从n到1处理加法。

若(a[i]+b[i])%10==ans[i],说明这一位可以保留,将f[i]设为1,如果有进位,将i处进位(k[i])设为1,如果没有进位,k[i] = 0, 更新答案最大值,只在不进位时更新最大值是有原因的,因为如果进位的话,你无法确定这一位是否该留,比如99 99 98,均满足相等,但都有进位,一个也不能留

然后从n到i枚举j,如果(a[i]+b[i]+k[j])%10==1,那么f[i]=max(f[i], f[j] + 1),同样有进位的话更新k[i],无进位时更新一下最大能保留多少位,最后取输出n-ans1即可

#include<bits/stdc++.h>
using namespace std;
int a[1050], b[1050], ans[1050], f[1050];
int k[1050];
int main() {
int n;
while (scanf("%d", &n) != EOF) {
if (n == 0) break;
for (int i = 1; i <= n; i++) {
scanf("%1d", &a[i]);
}
for (int i = 1; i <= n; i++) {
scanf("%1d", &b[i]);
}
for (int i = 1; i <= n; i++) {
scanf("%1d", &ans[i]);
}
int ans1 = 0;
memset(f, 0, sizeof(f));
memset(k, 0, sizeof(k));
for (int i = n; i >= 1; i--) {
if ((a[i] + b[i]) % 10 == ans[i]) {
f[i] = 1;
if (a[i] + b[i] - 10 == ans[i]) k[i] = 1;
else {
k[i] = 0;
ans1 = max(ans1, f[i]);
}
}
for (int j = n; j > i; j--) {
if ((a[i] + b[i] + k[j]) % 10 == ans[i]) {
f[i] = max(f[i], f[j] + 1);
if (a[i] + b[i] + k[j] - 10 == ans[i]) k[i] = 1;
else {
k[i] = 0;
ans1 = max(ans1, f[i]);
}
}
}
}
printf("%d\n", n - ans1);
}
return 0;
}
/**********************************************************************
Problem: 2034
User: Artoriax
Language: C++
Result: AC
Time:148 ms
Memory:2044 kb
**********************************************************************/

CSU-2034 Column Addition的更多相关文章

  1. Column Addition~DP(脑子抽了,当时没有想到)

    Description A multi-digit column addition is a formula on adding two integers written like this:

  2. 【动态规划】Column Addition @ICPC2017Tehran/upcexam5434

    时间限制: 1 Sec 内存限制: 128 MB 题目描述 A multi-digit column addition is a formula on adding two integers writ ...

  3. 2018湖南多校第二场-20180407 Column Addition

    Description A multi-digit column addition is a formula on adding two integers written like this:

  4. TokuDB存储引擎

    TokuDB是Tokutek公司开发的基于ft-index(Fractal Tree Index)键值对的存储引擎. 它使用索引加快查询速度,具有高扩展性,并支持hot scheme modifica ...

  5. Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)

    Servlet3.0提供@WebFilter注解将一个实现了javax.servlet.Filter接口的类定义为过滤器,这样我们在web应用中使用过滤器时,也不再需要在web.xml文件中配置过滤器 ...

  6. MariaDB glare cluster简介

    MariaDB MariaDB 是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器,MariaDB是同一MySQL版本的二进制替代品, 当前最新版本1 ...

  7. MySQL 高性能存储引擎:TokuDB初探

    在安装MariaDB的时候了解到代替InnoDB的TokuDB,看简介非常的棒,这里对ToduDB做一个初步的整理,使用后再做更多的分享. 什么是TokuDB? 在MySQL最流行的支持全事务的引擎为 ...

  8. System.Windows.Forms

    File: winforms\Managed\System\WinForms\DataGridView.cs Project: ndp\fx\src\System.Windows.Forms.cspr ...

  9. 浅谈MariaDB Galera Cluster架构

    MariaDB          MariaDB 是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器,MariaDB是同一MySQL版本的二进制替代品 ...

随机推荐

  1. JSP学习 三大指令、九个内置对象、JavaBean、EL表达式

    1.page-->最复杂:<%@page language="java" info="xxx"...%> * pageEncoding和con ...

  2. String和string

    String和string的区别 从位置讲:         1.String是.NET   Framework里面的String,小写的string是C#语言中的string 2.如果把using ...

  3. pat乙级1050螺旋矩阵

    1.用vector建立二维数组: vector<vector<int>> arr(rows); ; i < rows; i++) arr[i].resize(cols); ...

  4. sparkSQL中udf的使用

    在Spark中使用sql时一些功能需要自定义方法实现,这时候就可以使用UDF功能来实现 多参数支持 UDF不支持参数*的方式输入多个参数,例如String*,不过可以使用array来解决这个问题. 定 ...

  5. 一键备份脚本 backup.sh

    做网站最重要的是什么?数据!数据,是网站之本,备份,是每一个站长都应该重视的事情.但同时,备份也是一件繁琐和重复的事情.所以,这些事情,肯定能做到自动化的.下面来介绍一下这个一键备份脚本 backup ...

  6. 拷贝时间测试=cudamelloc+cudahostalloc

    /* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Corporation and its lic ...

  7. iOS启动原理及应用生命周期

    ios程序启动原理及生命周期图: ios应用程序的入口是main.m 1 #import <UIKit/UIKit.h> 2 3 #import "WYSAppDelegate. ...

  8. Oracle问题分析采集数据的方法

    1.背景: 运维人员或多或少都会遇到分析问题.分析故障的时候,往往在碰到一些棘手的问题事,我们都会往更深层次的专家进行求助.不管是二线专家还是Oracle全球服务工程师(后文称GCS工程师),往往都会 ...

  9. 安装配置JDK1.8开发环境以及配置java环境变量的步骤

    1.安装JDK开发环境 下载网站:http://www.oracle.com/ 开始安装JDK: 修改安装目录如下: 确定之后,单击“下一步”. 注:当提示安装JRE时,可以选择不要安装. 2.配置环 ...

  10. Ansible指令和常用模块使用

    这里文章记录一下ansible的指令选项和常用的模块使用 ansible指令选项 -m:要执行的模块,默认为command -a:模块的参数 -u:ssh连接的用户名,默认用root,ansible. ...