首页 > 编程语言 >2022年蓝桥杯C++B组国赛-试题D-最大数字

2022年蓝桥杯C++B组国赛-试题D-最大数字

时间:2024-04-11 23:56:14浏览次数:31  
标签:ch 数字 int sum 组国赛 DFS 蓝桥 num C++

0.题目

问题描述

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

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

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

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

输入格式

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

输出格式

一个整数代表答案。

样例输入
123 1 2

样例输出
933

数据范围

1.题解

1.1 DFS搜索

思路

从最高位开始递归迭代,确保每位尽可能的靠近9,位数越高尽量越大.

注意这里的范围 \(1<=N<=10^17\), 所以必须使用long long!
注意题目说的是最多使用A和B次,并不一定要使用全部次数!!!

代码

#include<bits/stdc++.h>
using namespace std;
# define ll long long 
int a, b;
char ch[20];
ll ans = 0;

// x为当前位数, sum为当前和 
void DFS(int x, ll sum) {
	int num = ch[x] - '0';		
	if(ch[x]){
		// 先判断是否能加到9
		int t = min(a, 9 - num);
		a -= t;
		DFS(x + 1, sum * 10 + num + t);
		a += t; // 回溯
		// 判断能否通过减到9
		if(b > num){
			b -= num + 1;
			DFS(x + 1, sum * 10 + 9);
			b += num + 1; // 回溯
		}
		 
	} else{
		ans = max(ans, sum);
	}
	return;
}

int main() {
	scanf("%s%d%d", ch, &a, &b);
	DFS(0, 0);
	cout << ans;
	return 0;
}

标签:ch,数字,int,sum,组国赛,DFS,蓝桥,num,C++
From: https://www.cnblogs.com/trmbh12/p/18130259

相关文章

  • C++——线性动态规划
    线性动态规划引入:1.爬楼梯爬楼梯类型的问题可谓是线性DP的入门题目以及经典中的经典。我们先来看一下题目。爬楼梯题目描述有一天,三萩实在太无聊了,竟然无聊到去数台阶了。有一个楼梯一共有m级,刚开始三萩在第一级,他就想,若每次只能跨上一级或者二级,要走上m级,共有多少种走法?......
  • C++ 引用和指针:内存地址、创建方法及应用解析
    C++引用和指针创建引用引用变量是对现有变量的“别名”,它是使用&运算符创建的:stringfood="Pizza";//食物变量string&meal=food;//对food的引用现在,我们可以使用变量名food或引用名meal来引用食物变量:cout<<food<<"\n";//输出Pizzacout<<mea......
  • 蓝桥杯-长草(BFS)
    0.题目【问题描述】小明有一块空地,他将这块空地划分为n行m列的小块,每行和每列的长度都为1。小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块......
  • P8725 [蓝桥杯 2020 省 AB3] 画中漂流
    题目:链接:https://www.luogu.com.cn/problem/P8725思路:dp[i][j]表示第i个时刻还有多少体力之前的错误思路:dp[i][j][k]表示第i个时刻,在j位置,有k个体力。但是注意:这三个变量并不是相互独立!!动规的一个取变量原则应该是相互独立确定某个状态。剩下k体力和i时刻可以推出位置!!site......
  • 蓝桥杯2016国赛-路径之谜
    0.题目小明冒充X星球的骑士,进入了一个奇怪的城堡。城堡里边什么都没有,只有方形石头铺成的地面。假设城堡地面是nxn个方格。【如图1.png】所示。按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着走,也不能跳跃。每走到一个新方格,就要向正北方和正西方各射一......
  • 深入解析C++的auto自动类型推导
    关键字auto在C++98中的语义是定义一个自动生命周期的变量,但因为定义的变量默认就是自动变量,因此这个关键字几乎没有人使用。于是C++标准委员会在C++11标准中改变了auto关键字的语义,使它变成一个类型占位符,允许在定义变量时不必明确写出确切的类型,让编译器在编译期间根据初始值自动......
  • 蓝桥杯训练
    P8712[蓝桥杯2020省B1]整数拼接-洛谷|计算机科学教育新生态(luogu.com.cn)题解:这道题和牛客类似,我们换一个思路我们可以开一个二维数组  一位用来记录拼在后面数的长度,一个用来记录这个数乘上10的(后面数的长度)模10我们直接乘1到10,全部记录下来然后枚举右边的数,看......
  • 太阳(蓝桥杯14届)
    https://www.lanqiao.cn/problems/3529/learning/?subject_code=2&group_code=5&match_num=14&match_flow=1&origin=cup1importjava.util.*;2//1:无需package3//2:类名必须Main,不可修改4importjava.util.Map.Entry;56publicclassDemo1{7......
  • C++ 类型特征(Type Traits)
     分类类型特征描述C++标准_v写法基本类型特性检查     std::is_same<T1,T2>::value检查两个类型是否相同C++11std::is_same_v<T1,T2>std::is_integral<T>::value检查T是否为整数类型C++11std::is_integral_v<T>std::is_floating_point<T>::value检查......
  • 候捷C++深入学习
    C++进阶学习头文件的防卫式声明#ifndefMYCLASS#defineMYCLASSHeaderfilecontent#endif成员函数的保护如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const修饰。例如不要将函数voidFunc1(intx)写成......