牛客 子序列(dp)

这题的比较关系是有线性关系的,因此设计状态为以第i结尾的个数是多少个,这样可以通过线性递推的方式实现

初始化每个都是1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=3e5+10;
const int mod=1e9+7;
int a[N];
ll f[N];
int main(){
    int i;
    int n;
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>a[i];
    }
    for(i=1;i<=n;i++)
        f[i]=1;
    for(i=1;i<=n;i++){
        for(int j=1;j<i;j++){
            if(j*log(a[i])>i*log(a[j])){
                f[i]=(f[i]+f[j])%mod;
            }
        }
    }
    ll res=0;
    for(i=1;i<=n;i++){
        res=(res+f[i])%mod;
    }
    cout<<res<<endl;
}
View Code

猜你喜欢

转载自www.cnblogs.com/ctyakwf/p/12974849.html