题意:从起点到终点,每次只能跳到比上一次大的点,问跳过的格子上和最大是多少。
思路:
求最长递增子序列,用动态规划。
#include<iostream>
using namespace std;int main()
{
int n;
int i,j,max,max1;
int w[1002],dp[1002];
while(cin>>n)
{
if(n==0) break;
for(i=0;i<n;i++)
cin>>w[i];
dp[0]=w[0];
max=dp[0];
for(i=1;i<n;i++)
{ dp[i]=w[i];
for(j=0;j<i;j++)
if(w[i]>w[j] && dp[j]+w[i]>dp[i])
{
dp[i]=dp[j]+w[i];
}
}
for(i=0;i<n;i++)
if(dp[i]>max)
max=dp[i];
cout<<max<<endl;
}
}