【发布时间】:2015-07-25 00:10:08
【问题描述】:
我正在解决这个问题 -> 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;
}
我发现我真的很难弄清楚我哪里出错了!
与我的代码相矛盾的测试用例也可以。
【问题讨论】:
-
@PersonWhoDownvoted - 感谢您的关注。但是,如果问题的任何部分不清楚,请告诉我。我想纠正它。
标签: c++ recursion dynamic-programming