问题描述
- 杭电1087,,dp问题,求解答!
-
#include
using namespace std;
int n;
int a[10005];
int vis[10005];int dp(int n)
{
if(vis[n]!=-1)
return vis[n];
vis[n] = 0;
int i;
for(i= n-1;i>=0;i--)
{
if(i==-1)
return 0;dp(i); if(vis[i]>=vis[n]) vis[n] = vis[i]; if(a[i]<a[n]) { int t = 0;; t += vis[i]+a[n]; if(t>vis[n]) vis[n] = t; } }
}
int main()
{
while(1)
{
memset(a,0,sizeof(a));
memset(vis,-1,sizeof(vis));
cin>>n;if(n==0) break; else { int i; for(i = 1;i<=n;i++) { cin>>a[i]; } dp(n); } cout<<vis[n]<<endl; } return 0;
}
不知道wa在哪里啊、、、、
时间: 2024-11-01 23:32:43