这是一道类似导弹拦截的dp题
首先式子可化为 log(a[j])/j<log(a[i])/i
然后用dp[i] 来表示以i位为结尾的子序列的个数
#include <bits/stdc++.h>
#define ll long long
int const N=110;
int const mod=1e9+7;
using namespace std;
int n,a[N],dp[N],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=n;++i)
{
for(int j=1;j<i;++j)
if(log(a[j])/j<log(a[i])/i) dp[i]+=dp[j]%mod;
dp[i]++;
}
for(int i=1;i<=n;++i) ans+=dp[i]%mod;
cout<<ans<<endl;
return 0;
}

京公网安备 11010502036488号