码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-02 20:50:15      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

题意:给你一个数字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\n", dp(n, m));
28     }
29     return 0;
30 }

 

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

标签:

原文地址:http://www.cnblogs.com/LLGemini/p/4309641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!