思路:基础动规题目,主要就是看出状态转移方程,然而,本水笔还是写不出动规程序,先写了个递归压压惊。感觉还是要拓展思路,总是想着dp[][]把自己往死里逼。。。不懂自己怎么回事。
递归中出现的错误是,把max_num置为0了,至少为1。
代码如下:
#include<iostream>
int numbers[30][30]={0};
int height[30] ={0};
using namespace std;
int solves(int start,int k);
inline int mymax(int a,int b)
{
return a>b?a:b;
};
int main(void)
{
int k,max_num = 0;
cin>>k;
for(int i=0;i<k;i++)
{
cin>>height[i];
}
for(int j = 0;j<k;j++)
{
max_num=mymax(max_num,solves(j,k));
}
cout<<max_num<<endl;
return 0;
}
int solves(int start,int k)
{
int max_num = 1;
if(start==(k-1))
{
return 1;
}
for(int j = start+1;j<k;j++)
{
if(height[start]>=height[j])
{
max_num=mymax(max_num,1+solves(j,k));
}
}
return max_num;
}
至于动规程序,引自:
点击打开链接。
其中给出更详细的思路,与解答,并附上了最优代码(我绝不承认我看不懂)。