/ ***************************************************** ****************************************************** ************************************ SPOJ上的硬币问题。” http://www.spoj.com/problems/硬币/ “。每次我遇到运行时错误(SIGSGEV)。请帮助解决问题。它在我的机器上运行良好,我找不到任何问题。它也给出正确的输出。但是在SPOJ中,它并没有被接受。****************************************************** ****************************************************** *********************************** /
#include<stdio.h>
long long arr[1000000]; /* Is this large number ok?*/
long long coins(long long n)/*Used recursion*/
{
if(n==0)
return 0;
if(arr[n]!=0)
return arr[n];
long long a,b,c,sum;
a=n/2;
b=n/3;
c=n/4;
sum=coins(a)+coins(b)+coins(c);
if(sum>n)
{
arr[n]=sum; /*Dynamic programming*/
return sum;
}
else
{
arr[n]=n; /*Dynamic programming*/
return n;
}
}
int main()
{
long long n;
while(scanf("%lld",&n))//Have doubt in this. Should it be while(scanf(...)!=EOF)
{
long long dollar=coins(n);
printf("%lld\n",dollar);
}
return 0;
}
问题表明n <= 1000000000,并且在功能硬币中,您将使用arr [n],该绝对值将超出1000000的范围。
但是我认为你是对的〜
提示:考虑2 ^ 32> 1000000000,那么有多少个子问题?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句