目录

  • 1.最大数字
    • 1.问题描述
    • 2.输入格式
    • 3.输出格式
    • 4.样例输入
    • 5.样例输出
    • 6.数据范围
    • 7.原题链接
  • 2.解题思路
  • 3.模板代码

1.最大数字

1.问题描述

给定一个正整数 NNN 。你可以对 NNN 的任意一位数字执行任意次以下 2 种操 作:

  1. 将该位数字加 1 。如果该位数字已经是 9 , 加 1 之后变成 0 。

  2. 将该位数字减 1 。如果该位数字已经是 0 , 减 1 之后变成 9 。

你现在总共可以执行 1 号操作不超过 AAA 次, 2 号操作不超过 BBB 次。 请问你最大可以将 NNN 变成多少?

2.输入格式

第一行包含 3 个整数: N,A,BN, A, BN,A,B

3.输出格式

一个整数代表答案。

4.样例输入

123 1 2

5.样例输出

933

6.数据范围

对于30%30\%30% 的数据, 1≤N≤100;1 \leq N \leq 100;1≤N≤100;0≤A,B≤100 \leq A, B \leq 100≤A,B≤10。

对于 100%100 \%100% 的数据, 1≤N≤1017;0≤A,B≤1001 \leq N \leq 10^{17} ; 0 \leq A, B \leq 1001≤N≤1017;0≤A,B≤100

7.原题链接

最大数字

2.解题思路

看上去NNN的范围貌似很大,达到了1e17的范围,但其实我们最多只需要考虑这最多17位数,所以可以想到爆搜得到答案。

一个数的大小是从左到右依次判断,所以我们从最左边开始枚举,我们无需关注后面的数,要利用自己的1号操作和2号操作保证当前这个数位的数一定要尽可能最大

然后分别考虑两种操作,首先两种操作不可能混用,因为它们是抵消的效果,所以要么对这个数全使用1操作,要么2操作。假设某个数位的值为x,首先考虑1号操作,使用后可以让该数位变大,出于贪心考虑,我们想让它变成9,那么需要进行9-x1号操作,当然可能此时1号操作并不足以让我们将x变成9,但我们还是使用剩余的全部的次数将其变大,所以每次考虑1号操作应该使用的操作数t应该为t=min(n,9-x),此时x将变为x+t,然后进行下一位的判断。

其次我们考虑2号操作,这个的判断比较简单,它是让某个值减小,唯一能让某个数变大的机会就是将其减到0后再减就会变成9。那么这样操作需要的次数就是x+1,如果操作次数不够,那我们宁愿不使用,因为这只会让这个数位变得更小。

在深搜dfs的过程中,参数记录遍历到第几个数位以及此时累计的和,当搜索完所有数位后,将此时的和与答案进行一个取max,最后的值则为答案。

3.模板代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;char c[20];
LL ans=0;
//n:1号操作剩余次数  m:2号操作剩余次数
int n,m;
void dfs(int i,LL v){int x=c[i]-'0';if(c[i]){//应该使用的操作次数int t=min(n,9-x);n-=t;dfs(i+1,v*10+x+t);//回溯n+=t;//考虑操作2是否能够使用if(m>x){m-=x+1;dfs(i+1,v*10+9);//回溯m+=x+1;}}else{//答案取maxans=max(ans,v);}
}
int main()
{scanf("%s%d%d",c,&n,&m);dfs(0,0);printf("%lld\n",ans);return 0;
}

第十三届蓝桥杯C++B组国赛D题——最大数字(AC)相关推荐

  1. 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组国赛真题解析

    前言 省赛真题解析见: 2022年第十三届蓝桥杯Web大学组省赛真题解析(完整版) 2022年第十三届蓝桥杯Web大学组省赛真题解析(精华版) 更多蓝桥杯题解请查阅专栏:蓝桥杯 之前写省赛解析时篇幅过 ...

  2. 第十三届蓝桥杯C++B组国赛I题——齿轮 (AC)

    目录 1.齿轮 1.题目描述 2.输入格式 3.输出格式 4.样例输入 5.样例输出 6.样例说明 6.数据范围 7.原题链接 2.解题思路 3.Ac_code 1.齿轮 1.题目描述 这天, 小明在 ...

  3. 第十三届蓝桥杯C++B组国赛E题——出差 (AC)

    CSDN话题挑战赛第2期 参赛话题: 目录 1.出差 1.问题描述 2.输入格式 3.输出格式 4.样例输入 5.样例输出 6.样例说明 7.数据范围 8.原题链接 2.解题思路 3.模板代码 1.出 ...

  4. 【第十三届蓝桥杯C++ B组省赛编程题详解】

    第十三届蓝桥杯C++ B组省赛编程题详解 第一题:刷题统计 题目描述 [Tag:枚举] 小明决定从下周一开始努力刷题准备蓝桥杯竞赛. 他计划周一至周五每天做a道题目,周六和周日每天做b道题目. 请你帮 ...

  5. 第十三届蓝桥杯Python B组国赛题解

    第十三届蓝桥杯Python B组国赛题解 试题A:斐波那契与7 试题 B: 小蓝做实验 试题 C: 取模 试题 D: 内存空间 试题 E: 近似 GCD 试题 F: 交通信号 试题 G: 点亮 试题 ...

  6. 第十三届蓝桥杯c++b组国赛决赛

    第一次参加蓝桥杯进国赛了,今天更新一下参加国赛的心得和写出的题吧~ 试题 A: 2022 思路:这题用的是三维背包,定义f[i][j][v]表示从前i个中选j个和为v的方案种数,那么可以得到状态转移方 ...

  7. 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组省赛真题解析(精华版)

  8. 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组省赛真题解析(完整版)

  9. 【第十二届蓝桥杯国赛真题】2021年第12届蓝桥杯JAVA B组国赛真题

最新文章

  1. 二叉树结点地址小错误
  2. 与女儿谈商业模式 (3):沃尔玛的成功模式
  3. 随机森林之oob error 估计
  4. 如何控制订单发料后不能删除组件
  5. setup.s 解读——Linux-0.11 剖析笔记(三)
  6. java需要先安装jdk_谢谢知乎。Java初学者首先下载 JDK 开发环境,然后再下 eclipse 对吗?那 tomcat是什么?还需要安装吗?...
  7. linux nginx 503,GitLab网页500/502/503错误–Nginx无法启动问题排查
  8. 程序员未来的职业生涯路该怎么走,如何避免35岁中年危机?
  9. 数据库(4)表的基本操作
  10. 我的docker随笔18:阿里云docker仓库的使用
  11. 关于 redis crackit 安全事件分析
  12. 技术解读Rainbond ServiceMesh微服务架构_开源PaaS Rainbond
  13. 用变量a给出下面的定义
  14. PHP自定义数组转Json字符串函数
  15. php反射机制详解,PHP反射机制
  16. 利用格林函数解泊松方程
  17. 中职计算机课应用的内容,信息技术手段在中职学校计算机课程教学中的应用
  18. NMS(非极大值抑制)
  19. 世界三大数字电视标准简介
  20. 计算机网络跳槽自荐信,计算机网络应用专业求职自荐信范文

热门文章

  1. 从零开始写第一个Android应用程序
  2. linux java -cp lt; .txt_补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能...
  3. matlab求时频分布图,Matlab时频分析TFD程序集(时频分布、chirplet分解、变形分数傅立叶变换)源代码...
  4. 均值归一化_深度神经网络中的归一化技术
  5. Python Crash Course读书笔记 - 第18章:GETTING STARTED WITH DJANGO
  6. 计算机网络-cisco选择题
  7. ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly
  8. centos yum清华镜像
  9. 【土旦】vue项目中 使用 pako.js 解密 gzip加密字符串
  10. 巴别鱼雏形,谷歌推出端到端语音翻译技术,还能模仿你说话