关于#c++#的问题,如何解决?

第1题 最长上升序列II
有N个数放在一个圆周上,可以从任意一个位置开始按照顺时针方向访问数据一圈,沿途可以挑选一些数,要求这些数是上升的(一个比一个大)。问最多能选多少个数?

输入格式
第一行:1个整数N,范围在1到100
第二行有N个整数,每个数范围在1到1000000

输出格式
最多挑选的个数。

输入/输出例子1
输入:

8

2 9 3 5 6 7 1 5

输出:

6

用c++98咋写??

思路,将这个数组复制一份,首尾相接
然后依次判断是否是上升序列

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int arr[n * 2];
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        arr[i] = arr[i + n] = x;
    }
    int ma = 0;
    int curr = 1;
    for (int i = 1; i < n * 2; i++)
    {
        if (arr[i] > arr[i - 1])
            curr += 1;
        else
            curr = 1;
        if (curr > ma) ma = curr;
    }
    cout << (ma > n ? n : ma);
       return 0;
}

这题我会,你要代码吗?
思路枚举每个点,但要注意他是围城一个环,可以用指针,也可以复制数组求解, 但暴力枚举我不太确定会不会超时

@threenewbee

int  cfun(int*arr, int len,int a,int length) {
    int L = length;
    for (int i = a; i < len; i++)
    {
        if (arr[a] < arr[i])
        {
            L = max(L, cfun(arr, len,i, length+1));
        }
    }
    return L;
}
int main() {
    int n;
    cin >> n;
    int arr[200];
    int max_L = 1;
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        arr[i] = arr[i + n] = x;
    }
    for (int i = 0; i < n; i++)
    {
        max_L = max(max_L, cfun(arr, n+i,i, 1));
    }

    cout<< max_L;
    system("pause");
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^