1350B. Orac and Models

B. Orac and Models:题目

题意:找一个最长的串,后一个下标可以整除前一个,并且a[i]<a[i+1]
#include 
using namespace std;
typedef long long ll;
vector<int> a((int)6e5);
vector<int> b((int)6e5), c((int)6e5);
int dp[(int)5e5];
int main()
{
    int t;
    cin>>t;
    while (t--)
    {
        int n;
        cin>>n;
        for (int i=1;i<=n;i++)
        {
            cin>>a[i];
            dp[i] = 1;
        }
        for (int i=1;i<=n;i++)
        {
            for (int j=2;j*i<=n;j++)
            {
                if (a[i*j]>a[i]) dp[j*i] = max(dp[i*j],dp[i]+1);
            }
        }
        int res =0;
        for (int i=1;i<=n;i++)
        {
            res = max(res,dp[i]);
        }
        cout<<res<<endl;
    }
}

你可能感兴趣的:(codeforces,dp,1300分题起,动态规划,算法,c++)