首页 > 其他 > 详细

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

时间:2015-03-02 20:49:40      阅读:303      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!