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金币每次都答错的主要内容,如果未能解决你的问题,请参考以下文章

这道 CSS 题目,57% 的开发者都答错了,你会吗?

你能答对这道 Go 题目吗?超过 80% 的人都答错了...

1-4金币阵列问题

JavaScript 题目(作用域)

一道校招笔试的C语言题目

Go 返回值命名还有存在的必要吗?