解题思路:
注意事项:
参考代码:
#include"bits/stdc++.h" using namespace std; int main(){ // 定义变量n表示数组长度,a、b、c为辅助数组,max用于存储最大值 int n, a[1100], b[1100], c[1100], max = 0; // 输入数组长度n cin >> n; // 输入数组a的元素 for(int i = 1; i <= n; i++){ cin >> a[i]; } // 计算数组b,b[i]表示以a[i]结尾的最长递增子序列的长度 for(int i = 1; i <= n; i++){ b[i] = 1; // 初始化b[i]为1 for(int j = 1; j <= i - 1; j++){ // 如果a[i]大于a[j]且b[i]小于b[j]+1,则更新b[i] if(a[i] > a[j] && b[i] < b[j] + 1){ b[i] = b[j] + 1; } } } // 计算数组c,c[i]表示以a[i]开头的最长递减子序列的长度 for(int i = n; i >= 1; i--){ c[i] = 1; // 初始化c[i]为1 for(int j = i + 1; j <= n; j++){ // 如果a[j]小于a[i]且c[i]小于c[j]+1,则更新c[i] if(a[j] < a[i] && c[i] < c[j] + 1){ c[i] = c[j] + 1; } } } // 计算最大值max,即最长的“山”形子序列的长度 for(int i = 1; i <= n; i++){ // 如果当前b[i] + c[i] - 1大于max,则更新max if(max < b[i] + c[i] - 1){ max = b[i] + c[i] - 1; } } // 输出最大值max cout << max << endl; return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:865 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:627 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C++代码)(手动优化一下计算)浏览:1367 |
Tom数 (C++代码)浏览:869 |
C语言训练-求素数问题 (C语言代码)浏览:774 |
哥德巴赫曾猜测 (C语言代码)浏览:1154 |
printf基础练习2 (C语言代码)浏览:324 |
Pascal三角 (C语言代码)格式错误浏览:551 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1073 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:934 |