农妇山泉一亩田 发表于 2024-11-25 11:35:45

蓝桥杯不知道叫什么标题

小蓝有一个整数,初始值为1,他可以花费一些代价对这个整数进行变换。
小蓝可以花贵1的代价将教数增加1。
小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的谁人(1到9) .小蓝可以花费10的代价将整数变为原来的2倍,
比方,如果整数为16花费3将整数变为22,
又如,如果整数为22花费1将整数变为33,
又如,如果整数为23,花费10将整数为 46。
叨教,如果要将整数从初始值1变为 2024,叨教限少需要多代价?
 
思路:注意!!!!只能从1开始推到2024,由于此中有一个状态方程是要求取出当前数字最大数字(1~9),所以倒着写是不可行的。别的还要写一个函数取出当前数字内里的最大数字(1~9)。。记忆化搜索,正常写出所有推出状态的方程,并且每次要重置一个非常大的值比大小,每个状态方程的边界要写清楚。当x == 2024的时间返回0,完成基准情况即可。
#include<iostream>
#include<algorithm>
using namespace std;
int mem;
int Mnum(int k)
{
        int t,M = -1e6;
        while(k)
        {
                t = k % 10;
                M = max(M,t);
                k = k/10;
        }
        return M;
}
int dfs(int x)//当前为x数字
{
       if(x == 2024)
       return 0;
       int sum = 1e6;
       if(mem)
       return mem;

       if(x * 2 <= 2024)
       sum = min(sum,dfs(x*2)+10);
       
       if(x + Mnum(x) <= 2024)
       sum = min(sum,dfs(x+Mnum(x))+3);
       
       if(x + 1 <= 2024)
   sum = min(sum,dfs(x+1)+1);
   
       mem = sum;
       return sum;
}
int main(void)
{
        cout << dfs(1);
        return 0;
} https://i-blog.csdnimg.cn/direct/73aa2dfc5a444a50bbc4cfb861825a93.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 蓝桥杯不知道叫什么标题