最大化情绪波动的数量

时间:2015-10-20 19:22:15

标签: algorithm recursion dynamic-programming

Sam最初有k个苹果。然后他访问了m个商店。给出了包含m个值的数组arr。在每个商店,他要么购买或出售arr[i]个苹果。如果他没有足够的苹果可以出售,那么他就卖掉他所有的东西。如果Sam具有< N,则给出k。 N苹果他很伤心别的开心。每当他有> N个苹果,他总是卖arr [i]苹果数量。我们必须在每个商店出售或购买,以使他的情绪波动次数最多。

mNm #include<iostream> using namespace std; void fun(int *arr, int m , int l, int count, int &max, int k , int N) { if(l == m) { if(count > max) max = count; } else { char state; if(k > N) state = 'h'; else state = 's'; char newstate; int prevk = k; if(k < N) { k+=arr[l]; if(k > N) newstate = 'h'; else newstate = 's'; if(state != newstate) fun(arr,m,l+1,count+1,max,k,N); else fun(arr,m,l+1,count,max,k,N); } k = prevk; k-= arr[l]; if(k < 0) k = 0; if(k > N) newstate = 'h'; else newstate = 's'; if(state != newstate) fun(arr,m,l+1,count+1,max,k,N); else fun(arr,m,l+1,count,max,k,N); k = prevk; } } int main() { int k,m,n; cin >> k >> m >> n; int *arr = new int [m]; for(int i=0;i<m;i++) cin >> arr[i]; int max = 0; fun(arr,m,0,0,max,k,n); cout << max << endl; } 整数。

每当他有&gt; N苹果他总是会卖掉但是当他有&lt; = N时,他可以出售或购买那么多苹果。我们不能说当他有&= N个苹果时,购买会使他的情绪波动最大化。

我运行了一个递归代码,但它给出了Timed out错误,我无法想到任何其他方法。有帮助吗?这是我的递归代码。

{{1}}

0 个答案:

没有答案