题目:https://www.nowcoder.com/acm/contest/152/A
思路:化log来做
aji<aij
a
i
j
<
a
j
i
1<log(aij)(aji)
1
<
l
o
g
(
a
i
j
)
(
a
j
i
)
1<ij∗log(ai)log(aj)
1
<
i
j
∗
l
o
g
(
a
i
)
l
o
g
(
a
j
)
代码:
#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
int a[105];
long long dp[105];
int main()
{
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 = 1;j < i;j++)
if(j*log(a[i]*1.0) > i*log(a[j]*1.0))
dp[i] += dp[j];
}
for(int i = 1;i <= n;i++)
dp[0] = (dp[0] + dp[i])%MOD;
cout << dp[0] <<"\n";
return 0;
}
本文介绍了一道ACM竞赛题目,通过引入对数运算简化了原问题的比较过程。利用C++实现了一个高效的算法解决方案,并通过动态规划的方法求解最长递增子序列。

1654

被折叠的 条评论
为什么被折叠?



