优化这段代码:#include<bits/stdc++.h> using namespace std; int gao[1000005]; int main(){ int n,bian; long long zui=0,xian=0; while(cin>>n&&n!=0){ for(int a=1;a<=n;a++){ cin>>gao[a]; } for(bian=1;bian<=n;bian++){ for(int i=bian;i<=n;i++){ if(gao[bian]<=gao[i]){ xian=xian+gao[bian]; } else { break; } } zui=max(zui,xian); xian=0; } cout<<zui<<endl; } return 0; }
时间: 2023-12-04 07:05:38 浏览: 67
这段代码的时间复杂度为 O(n^2),可以使用动态规划的思想优化。具体来说,可以使用一个 dp 数组表示以当前位置为结尾的最长递增子序列和,然后在每次更新 dp 数组时更新最大值即可。优化后的代码如下:
```c++
#include <bits/stdc++.h>
using namespace std;
int gao[1000005];
long long dp[1000005];
int main() {
int n;
while (cin >> n && n != 0) {
for (int a = 1; a <= n; a++) {
cin >> gao[a];
}
dp[1] = gao[1];
long long zui = dp[1];
for (int i = 2; i <= n; i++) {
dp[i] = gao[i];
for (int j = 1; j < i; j++) {
if (gao[j] <= gao[i]) {
dp[i] = max(dp[i], dp[j] + gao[i]);
}
}
zui = max(zui, dp[i]);
}
cout << zui << endl;
}
return 0;
}
```
优化后的代码时间复杂度为 O(n^2),可以通过本题。
阅读全文