• 【记忆化搜索】Codeforces Round #295 (Div. 2) B


    题意:给你一个数字n,有两种操作:减1或乘2,问最多经过几次操作能变成m;

    随后发篇随笔普及下memset函数的初始化问题。自己也是涨了好多姿势。

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #define INF 0x7fffffff;
     6 using namespace std;
     7 int DP[20100], vis[20100];
     8 int dp(int n, int m)
     9 {
    10     if(n <= 0) return INF;
    11     if(n >= m) {DP[n] = n-m; return DP[n];}
    12     if(!vis[n])
    13     {
    14         vis[n] = 1;
    15         //cout << n << "+++" << endl;
    16         DP[n] = min(dp(n-1, m),  dp(n*2, m))+1;
    17     }
    18     return DP[n];
    19 }
    20 int main()
    21 {
    22     int n, m;
    23     while(~scanf("%d%d", &n, &m)){
    24         memset(DP, 0x3f3f3f3f, sizeof(DP));
    25         memset(vis, 0, sizeof(vis));
    26         //cout << DP[0] << endl;
    27         printf("%d
    ", dp(n, m));
    28     }
    29     return 0;
    30 }
  • 相关阅读:
    TypeScript 函数
    单链表 C++
    测试用例概念 原则
    TypeScript 类
    TypeScript 接口
    Cellection
    面向对象
    反射
    B树
    无权无向图
  • 原文地址:https://www.cnblogs.com/LLGemini/p/4309641.html
Copyright © 2020-2023  润新知