Bytelandian金币每次都答错
Posted
技术标签:
【中文标题】Bytelandian金币每次都答错【英文标题】:Bytelandian gold coins wrong answer every time 【发布时间】:2014-11-27 09:59:49 【问题描述】:请帮助我找出为什么我得到这个Bytelandian gold coins
问题的错误答案。
这是我的解决方案COINS
#include <iostream>
#include <cstdio>
#include <map>
#define max2(a, b) ((a) > (b) ? (a) : (b))
using namespace std;
map <long long , long long > C;
long long f(long long n)
if (n == 0) return 0;
long long r = C[n];
if (r == 0)
r = max2( n , f(n/2)+f(n/3)+f(n/4) );
C[n] = r;
return r;
int main()
int t;
long long n;
scanf("%d",&t);
while(t--)
scanf("%lld",&n);
printf("%lld\n",f(n));
return 0;
我是动态编程的新手,所以我在谷歌上搜索了这个问题,我正在尝试实施 来自SPOJ_Coins, 但在 codechef.com 和 spoj 上仍然得到错误的答案。
【问题讨论】:
请在问题本身(不是链接)的正文中提供完整的问题,以及代码的相关部分。您还应该提供一个测试用例,说明您的代码未能按预期执行。 @amit :它为问题中的给定测试用例提供了正确答案,我认为问题不大可以在这里发布。 @amit : 我已经添加了我的代码 “它为问题中的给定测试用例提供了正确答案” - 那么什么测试用例 不 它为...提供了正确答案?您应该在这里简洁地描述问题(剪切和粘贴很好 - 其他站点许可证允许 - 但尽可能简洁)。这些其他链接可能在一个月内不会出现,人们想知道他们的 SO 答案可能是其他读者的长期资源...... 您对max2
使用宏可能是出于效率原因,这会降低代码的效率。
【参考方案1】:
对于这个问题,你必须在 EOF 之前接受输入。但是您正在使用测试用例进行输入。
试试这个代码:
#include <iostream>
#include <cstdio>
#include <map>
#define max2(a, b) ((a) > (b) ? (a) : (b))
using namespace std;
map <long long , long long > C;
long long f(long long n)
if (n == 0) return 0;
long long r = C[n];
if (r == 0)
r = max2( n , f(n/2)+f(n/3)+f(n/4) );
C[n] = r;
return r;
int main()
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
int t;
long long n;
while(scanf("%lld",&n)==1)
printf("%lld\n",f(n));
return 0;
【讨论】:
以上是关于Bytelandian金币每次都答错的主要内容,如果未能解决你的问题,请参考以下文章