私は最近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