我发现很难实现这个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;
}
答案 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个值。)