牛客网【每日一题】4月24日 子序列

链接:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format:%lld

题目描述

小美有一个由n个元素组成的序列{a1,a2,a3,…,an},她想知道其中有多少个子序列{ap1,ap2,…,apm}(1 ≤ m
≤ n, 1 ≤ p1 < p2 ,…, < pm ≤ n),满足对于所有的i,j(1 ≤ i < j ≤ m), apipj < apjpi成立。

输入描述:

第一行一个整数n (1≤n≤100)表示序列长度。 接下来一行n个整数{a1,a2,a3,…,an}(1≤ai≤100)表示序列。

输出描述:

输出一行表示满足条件的子序列的数目。因为答案可能很大,请输出答案mod 1,000,000,007。

示例1
输入

2
1 2

输出

3

说明
满足条件的子序列为{1}, {2}, {1 2}。
题解:

本质是求ln(ai)/i递增的子序列种类
我们用f[i]表示以i结尾种类的数量
f[i]=∑f[j]
最后答案为∑f[i]
代码:

#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int a[103];
int n,sum;
int f[102];
int main()
{
   
    cin>>n;
	
	for(int i=1;i<=n;i++)
	{
   
	cin>>a[i];
	f[i]=1;
	}
    for(int i=2;i<=n;i++)
    for(int j=1;j<=i-1;j++)
	if(log(a[j])*i < log(a[i])*j)
	{
   
			f[i] = (f[i] + f[j])%mod;
// cout<<f[i]<<endl; 
	} 

	for(int i=1;i<=n;i++) sum = (sum + f[i])%mod;
    cout<<sum<<endl;
}
全部评论

相关推荐

今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,也有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
01-30 09:45
燕山大学 Java
喵_coding:这种直接跑就完事了 哪有毕业了才签合同 任何offer和三方都没有的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务