请帮助我找出为什么我得到错误的答案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上得到错误答案。
答案 0 :(得分:2)
对于此问题,您必须输入直到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;
}