• 题意:有两个正整数\(n\)和\(m\),每次操作可以使\(n*=2\)或者\(n-=1\),问最少操作多少次使得\(n=m\).

  • 题解:首先,若\(n\ge m\),直接输出\(n-m\),若\(2*n>=m\),分\(m\)的奇偶判断一下,如果是奇数就输出\(n-(m+1)/2+2\),是偶数就输出\(n-m/2+1\).否则我们就需要用dp来求解,因为是求最小值,所以先初始化将所有值设为\(INF\),\(dp[i]\)表示从\(n\)到\(m\)的操作次数最少的最优解,首先需要更新\([1,n]\)的状态,这个不难写,\(dp[i]=dp[i+1]+1\),然后我们就可以从\(1\)开始枚举到\(m\),而我们当前的状态\(dp[i]\)可以更新后面的状态\(dp[i*2]\),这步应该不难想,这儿的难点是我们需要更新一些奇数的状态,比如\(n=2\),我们刚开始可以更新\(dp[4]\),然后到\(n=3\)的时候发现\(3\)只能通过\(4\)更新得到,而\(dp[4]\)由\(dp[2]\)更新过了,所以我们可以通过\(dp[4]\)来更新\(dp[3]\),于是每次遍历我们更新两个状态,一个是自己的状态\(dp[i]=min(dp[i],dp[i+1]+1)\),一个是后面的数的状态\(dp[i*2]=min(dp[i*2],dp[i]+1)\).

  • 代码:

    int n,m;
    int dp[N]; int main() {
    //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    n=read(),m=read(); if(n>=m){
    printf("%d\n",n-m);
    return 0;
    } if(m<=2*n){
    if(m&1){
    int cnt=(m+1)/2;
    printf("%d\n",n-cnt+2);
    }
    else printf("%d\n",n-m/2+1);
    return 0;
    }
    me(dp,INF,sizeof(dp));
    dp[n]=0;
    for(int i=n-1;i>=1;--i) dp[i]=dp[i+1]+1; for(int i=1;i<=m;++i){
    dp[i]=min(dp[i],dp[i+1]+1);
    dp[i*2]=min(dp[i*2],dp[i]+1);
    } printf("%d\n",dp[m]); return 0;
    }

最新文章

  1. node爬虫之gbk网页中文乱码解决方案
  2. spring @condition 注解
  3. prototype.js简介
  4. 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)
  5. 第六课,T语言表达式(版本5.0)
  6. java中的容器问题
  7. 云计算服务模型,第 3 部分: 软件即服务(PaaS)
  8. U盘安装CentOS6.x报错:Missing ISO 9660 Image
  9. Oracle10g数据泵EXPDP和IMPDP备份与恢复数据
  10. java使用AES加密解密 AES-128-ECB加密
  11. CDI Features
  12. MySql 学习之路-高级2
  13. 从Node到Go的心路之旅
  14. 2019/02/09 对于KinectFusion 的理解
  15. 如何从本地远程访问虚拟机内的Mysql服务器?
  16. HDU5977 Garden of Eden 【FMT】【树形DP】
  17. 前端下载excel文件功能的三种方法
  18. Linux 下用 valgrind 查找内存泄漏小例子
  19. Vue--基本语法
  20. 20169207《Linux内核原理与分析》第八周作业

热门文章

  1. Logrotate工具使用
  2. 【ASM】介绍Oracle自带的一些ASM维护工具 (kfod/kfed/amdu)
  3. postgresql中权限介绍
  4. PAT练习num1-害死人补偿命的3n+1猜想
  5. linux设备注册
  6. three.js cannon.js物理引擎之Heightfield
  7. 超微服务器重置ipmi登录密码
  8. RestTemplate post请求
  9. 对话 CTO〡用声音在一起,听荔枝 CTO 丁宁聊 UGC 声音互动平台的技术世界 原创 王颖奇 极客公园 2018-12-01
  10. python RecursionError: maximum recursion depth exceeded while calling