최근에 DP 문제를 해결하기 시작했고 나는 COINS를 발견했습니다. memoization 함께 DP를 사용하여 그것을 해결하기 위해 노력하고 int 배열을 사용하는 경우 잘 작동합니다. 은 여기 내 접근 방식 (왼쪽 약간 수정)입니다 :SPOJ COINS DP 및 재귀 적 접근
#include <stdio.h>
#include <stdlib.h>
int dp[100000];
long long max(long x, long y)
{
if (x > y)
return x;
else
return y;
}
int main()
{
int n,i;
scanf("%d",&n);
dp[0]=0;
for(i=1;i<=n;i++)
{
dp[i]=max(i,dp[i/2] + dp[i/3] + dp[i/4]);
}
printf("%d\n",dp[n]);
return 0;
}
그러나 나는 SIGSEGV를 얻을 오래 오래 배열을 사용 나는 즉시 이해하지 않습니다. 필자는 수색을했으며, 내가 이해하지 못하는 재귀 적 해결책이있는 것으로 보인다. 누군가 나를 도와 줄 수 있습니까?
한계는'N <= 10e9', 배열의 크기가 어느 항상 메모리 오버 플로우가 발생합니다 따라서, SIGSEGV 말 :
정확한 코드 (당신이 내 포인트를 얻을). dp-array의 유형이 무엇인지는 중요하지 않습니다. – vish4071