給定一個整數N表示線段的長度。您需要以線段每次切割長度爲x,y或z的整數的方式剪切線段。並且在執行所有切割操作之後,切割段的總數量必須是最大的。分割錯誤
#include <iostream>
#include<vector>
#include<math.h>
#include<climits>
#include<algorithm>
using namespace std;
int count(int*dp,int x,int y,int z,int N)
{
if(N==0)
{
return 1;
}
if(N<0)
{
return 0;
}
if(dp[N]!=INT_MAX)
{
return dp[N];
}
dp[N]=max(count(dp,x,y,z,x)+count(dp,x,y,z,N-x)
,max(count(dp,x,y,z,y)+count(dp,x,y,z,N-y),
count(dp,x,y,z,z)+count(dp,x,y,z,N-z)));
return dp[N];
}
int main()
{
//code
int t;
cin>>t;
for(int i=0;i<t;i++)
{
int n;
cin>>n;
int x,y,z;
cin>>x;
cin>>y;
cin>>z;
//cout<<x<<y<<z<<n;
int*dp=(int*)malloc(sizeof(int)*n+1);
// int dp[n+1];
dp[0]=1;
for(int i=1;i<=n;i++)
{
dp[i]=INT_MAX;
}
cout<<x<<y<<z<<n;
cout<<count(dp,x,y,z,n)<<endl;
}
return 0;
}
[調試你的程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。不要傾倒在我們身上。 – StoryTeller
首先,不要在C++中使用'malloc',而應使用'new []'。然後學會在這種情況下根本不使用動態分配,而是使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。最後,雖然您可能會分配足夠的空間來使用基於1的數組(或向量)索引,但請避免這種情況,並且可能會讓所有讀取代碼的人感到困惑。 –
至於你的問題,你有沒有檢查你的遞歸不深?您是否因*全部*輸入而崩潰?還是隻爲一些輸入? –