子序列 题解
子序列
https://ac.nowcoder.com/acm/problem/17065
看到题目给的式子,一个幂函数式子两边却同时含有i和j
这怎么说呢,很常见的套路吧,直接取个对数一般就会了
取完对数得到的是是这个东西
这题可以有 的做法,只是完全没必要,数据不大直接 跑一下dp就行了
#pragma GCC optimize(2) #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; const ll inff = 0x3f3f3f3f3f3f3f3f; #define FOR(i,a,b) for(int i(a);i<=(b);++i) #define FOL(i,a,b) for(int i(a);i>=(b);--i) #define REW(a,b) memset(a,b,sizeof(a)) #define inf int(0x3f3f3f3f) #define si(a) scanf("%d",&a) #define sl(a) scanf("%lld",&a) #define sd(a) scanf("%lf",&a) #define ss(a) scanf("%s",a) #define mod ll(998244353) #define pb push_back #define eps 1e-6 #define lc d<<1 #define rc d<<1|1 #define Pll pair<ll,ll> #define P pair<int,int> #define pi acos(-1) #define VI vector<int> const int N=1e2+8; ll mo=1e9+7,dp[N],n,a[N]; int main() { cin.tie(0); cout.tie(0); cin>>n; FOR(i,1,n) { sl(a[i]);dp[i]=1; FOR(j,1,i-1) if(i*log(a[j])<j*log(a[i])) dp[i]=(dp[i]+dp[j])%mo; } ll ans=0; FOR(i,1,n) ans=(ans+dp[i])%mo; cout<<ans<<endl; return 0; }