我正在解决这个问题-> http://www.spoj.com/problems/COINS/。一个非常简单的 DP 问题,采用非常直接的 DP 方法。我在问题陈述中找到了使用 DP 的足够提示。所有测试用例都在我的编译器中完美运行,但我在 SPOJ 中获得了 WA。我的代码如下:
我的代码
#include <cstdio>
#include <map>
#include <cstring>
#include<algorithm>
using namespace std;
map< long long,long long > data;
map < long long,long long> :: iterator p;
int max(int a,int b)
{
if(a>b)return a;
return b;
}
long long calc(int n)
{
long long c;
if(n==0 || n==1 || n==2)
return n;
p = data.find(n);
if(p==data.end())
{
c = max(n, calc(n/2) + calc(n/3) + calc(n/4));
data.insert(p, pair < long long, long long > (n, c));
return c;
}
else return (*p).second;
}
int main()
{
int t;
long long n;
scanf("%d",&t);
if(t>10)return 0;
while(t--)
{
scanf("%lld",&n);
if(n<0 || n>1000000000)
break;
data.clear();
printf("%lld",calc(n));
}
return 0;
}
我发现我真的很难弄清楚我哪里出错了!
与我的代码相矛盾的测试用例也可以。