Byteland Coins阵列解决方案

时间:2015-12-23 11:44:36

标签: c++ arrays dynamic-programming

我发现很难实现这个SPOJ问题: - http://www.spoj.com/problems/COINS/ 我找到了某人的代码,但它包含了一个我希望用数组代替的地图函数。这里的代码是: -

#include <bits/stdc++.h>
using namespace std;
#define LL long long
map <LL,LL> ans; 

LL coins(LL n)
{
     if(n==0)
          return 0;
     else if(!ans[n])  //what does this condition check?
     {
          ans[n]= max(n,coins(n/2) + coins(n/3) + coins(n/4));
     }
     return ans[n];
}

int main() {
     LL n;
     while(scanf("%lld",&n)!=EOF)
     {
          printf("%lld\n",coins(n));
     }

     return 0;
}

2 个答案:

答案 0 :(得分:0)

只需使用类似的内容(并尽可能避免使用#define):

typedef ll_type long long;
const size_t max_size = //...
ll_type ans[max_size];

答案 1 :(得分:0)

如果你想使用数组,那么你最好使用vector。 声明向量以在上面的代码中保存n值并使用0,

初始化它
vector<LL> v(n, 0);

关于在代码中检查什么条件只是我们是否找到了n硬币的答案,因为默认情况下ans[n]将包含0(但这不是访问第n个元素的好方法在地图中不包含n个值。)