题目链接在此,拿需
思路:基础动规题目,主要就是看出状态转移方程,然而,本水笔还是写不出动规程序,先写了个递归压压惊。感觉还是要拓展思路,总是想着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; }至于动规程序,引自: 点击打开链接。其中给出更详细的思路,与解答,并附上了最优代码(我绝不承认我看不懂)。