提交时间:2023-05-31 18:28:47

运行 ID: 18858

//#include<bits/stdc++.h> //using namespace std; //int main(){ // int n,i,j; // cin>>n>>i>>j; // for(int j1=1;j1<=n;j1++){ // cout<<"("<<i<<","<<j1<<") "; // } // cout<<endl; // for(int i1=1;i1<=n;i1++){ // cout<<"("<<i1<<","<<j<<") "; // } // cout<<endl; // for(int i1=1;i1<=j;i1++){ // cout<<"("<<i1<<","<<i1+1<<") "; // } // cout<<endl; // for(int o=1;o<=n;o++){ // if((i+j)==(x+y)) // cout<<"("<<o<<","<<i+j-o<<") "; // } // return 0; //} #include &lt;bits/std<em>c++</em>.h&gt; using namespace std; const int MAXN = 1010; int a[MAXN],dp[MAXN]; int main(){ int n; scanf(&quot;%d&quot;,&amp;n); for(int i=1;i&lt;=n;i++){ scanf(&quot;%d&quot;,&amp;a[i]); dp[i]=1; //初始化dp数组 } for(int i=1;i&lt;=n;i++){ //i从1到n枚举每个数字 for(int j=1;j&lt;i;j++){//j从1到i-1枚举i之前的每个数字 if(a[j]&lt;=a[i]){//如果前面有小于等于当前的数字,则可以从其转移而来 dp[i]=max(dp[i],dp[j]+1); } } } int ans=0; for(int i=1;i&lt;=n;i++){//找到dp数组中的最大值 ans=max(ans,dp[i]); } printf(&quot;%d\n&quot;,ans); return 0; }